`
coding1688
  • 浏览: 236834 次
  • 来自: 上海
社区版块
存档分类
最新评论

当rowspan遇到Chrome、Safari和Opera,jQuery解决方案

 
阅读更多

当rowspan遇到Chrome、Safari和Opera

这是我碰到一个问题,也是好多人碰到的问题,所以借用csdn上的一个贴的内容来描述该问题,如下:

 

http://topic.csdn.net/u/20120517/17/b331bdcc-aedf-4e96-8a5d-0a0668cc1a3d.html 写道
做了一个简单表格,带有rowspan的,在IE、FF显示正常,Chrome左列各行高度不平均,大家知道怎样处理吗?

代码如下:
<table border=1>
<tr>
<td>aa</td>
<td rowspan=4><img src="aa.jpg"></td>
</tr>
<tr><td>bb</td></tr>
<tr><td>cc</td></tr>
<tr><td>dd</td></tr>
</table>
 

显示效果如下:

 

我翻看了一下该贴,最终决定用js来解决(还有一个解决方案是直接设置height属性)。

 

T5500 写道
这个算不上是Chrome的BUG,而是webkit核心的实现方式就是这样,所以在Safari、Opera下也是同样的效果。应该可以用JS来解决。

 

 

借鉴了csdn上代码,先贴上

 

//DEMO
//这里只作了粗略的计算,精确点的话还需要考虑tr、td所使用的样式(边框宽度、padding值)
window.onload = function() {
    if (!window.all) {
        var obj = document.getElementById('demo');
        
        var rowHeight = Math.ceil(parseInt(obj.offsetHeight) / obj.getElementsByTagName('tr').length) + 'px';
        var cells = obj.getElementsByTagName('td');
        for (var i = 0; i < cells.length; i ++) {
            if (cells[i].rowSpan < 2) cells[i].style.height = rowHeight;
        }
    }
}
 

 

思路大体上是:先得到table的总的高度,然后除以行数,就可以得到每行的平均高度,然后对没有设置rowspan的td设置为此平均高度。但实际中需要对高度做些调整,因为td的样式(如margin和padding会对高度产生影响)。

 

我是用jQuery来做的,经过艰苦的努力,终于得到了一个比较满意的解法,如下:

 

$(function(){
    //if (!window.all) {
	if ($.browser.safari || $.browser.opera) {
		//alert("me");	// 确认是哪种浏览器
		// Safari pass
		// Chrome pass
		// Opera pass

		function adjustCellHeight($table, adjustHeight) {
			var tableHeight = $table.height();
			//alert(tableHeight);
			var rowCount = $("tr", $table).length;
			//alert(rowCount);
			if (tableHeight > 0 && rowCount > 0) {
				//alert("xxx");
				//var adjustHeight = 11;	// 对计算出来的平均行高,需要减去一定得像素值(由margin和padding引起),已达到与IE和FF下同样的效果。
				var cellHeight = (tableHeight - 2 * (adjustHeight || 0)) / rowCount + "px";	// 计算每行的高度
				$("td", $table).each(function(){
					var $this = $(this);
					var rowspan = $this.attr("rowspan");
					if (rowspan < 2) {
						$this.css("height", cellHeight);
					}
				});
				//alert("hello");
				var tableHeightAdjusted = $table.height();
				if (tableHeightAdjusted - tableHeight >= rowCount || tableHeight - tableHeightAdjusted >= rowCount) {
					//var adjustHeightSuggest = adjustHeight + (tableHeightAdjusted - tableHeight) / rowCount;
					//alert(tableHeight + " " + tableHeightAdjusted + " " + adjustHeightSuggest);
					//return adjustHeightSuggest;
					return tableHeightAdjusted - tableHeight;
				}
				//alert("done");
			}
		}

		var $table = $("#bmbasic");
		var adjustHeightSuggest = adjustCellHeight($table);
		//alert(adjustHeightSuggest);
		if (adjustHeightSuggest) {
			adjustCellHeight($table, adjustHeightSuggest);
		}
    } else {
		// IE pass
		// Firefox pass
	}
});
 

 

注意:我的table的id是bmbasic。

 

方法是采用两次调整法:

第一次调整:将每行设置为平均高度,得到最终高度与原高度差值(tableHeightAdjusted - tableHeight),记为adjustHeightSuggest;

第二次调整:将table的当前高度减去两倍的adjustHeightSuggest之后求得平均高度,设置上去就正确了。为什么是两倍,想想就清楚了。

 

 

 

 

 

 

4
2
分享到:
评论

相关推荐

    jquery.table.rowspan.js 表格自动合并单元格插件

    `jQuery.table.rowspan.js`是一个专为解决表格中单元格自动合并问题的jQuery插件。这个插件允许开发者在前端轻松处理复杂的表格布局,提高用户体验,同时也减轻了服务器端的计算压力。 ### 插件原理 `rowspan`属性...

    jquery table rowspan 表格单元格合并Demo.zip

    在网页开发中,jQuery 是一个广泛使用的 JavaScript 库,它极大地简化了 JavaScript 的操作,包括对 HTML 文档的...开发者可以通过分析这个示例,学习到如何在实际项目中灵活运用 `rowspan` 和 jQuery 进行表格操作。

    通过jquery还原含有rowspan、colspan的table的实现方法

    最后,需要指出的是,本文提供的是还原具有rowspan和colspan属性的表格的一种实现方法,实际上,网络上已经存在其他的解决方案和代码示例,如通过cellbreak插件来实现类似的功能,这些都是前端开发者在实际项目中...

    jquery.table.rowspan.js

    jquery.table.rowspan.js

    [备忘]工作中遇到的一个含rowspan情况table画虚线问题

    本文将围绕“含`rowspan`情况下的`table`画虚线问题”展开讨论,结合标签提供的“源码”和“工具”两个关键词,深入解析如何解决此类问题。 首先,`rowspan`是HTML `&lt;td&gt;`(表格数据单元格)标签的一个属性,用于...

    colspan和rowspan

    同时,当表格数据动态变化时,要确保正确计算和调整 `colspan` 和 `rowspan` 的值,以保持表格的平衡和逻辑一致性。 此外,虽然现代前端框架和库如React、Vue等提供了更高级的表格组件,可以更方便地处理复杂的表格...

    jQuery实现合并单元格功能

    通过查看和学习这些示例,你可以进一步理解和掌握如何使用jQuery实现单元格合并。同时,为了保证代码的可维护性和性能,记得在编写代码时遵循良好的编程实践,如避免不必要的遍历和操作,以及合理地组织和注释代码。

    jquery行列合并例子

    在网页开发中,jQuery是一个非常流行的JavaScript库,它简化了DOM操作、事件处理以及动画制作。在这个"jquery行列合并例子"中,我们关注的是如何利用jQuery来实现HTML表格中的行和列合并,这对于数据展示或者创建...

    BIRT总结 里面有从学到用所遇到问题的解决方案和实例

    本总结主要涵盖了从基础到实践的BIRT报表制作过程,以及在学习过程中遇到的问题及解决方案。 首先,我们来详细探讨如何制作一个简单的BIRT报表: 1. 创建报表工程:通过BIRT的项目向导,你可以创建一个新的BIRT...

    jquery datatable 单元格合并

    在IT领域,jQuery DataTables是一款广泛使用的数据展示插件,它提供了丰富的功能,如排序、搜索、分页等。在某些场景下,我们可能需要对表格中的单元格进行合并,以便更好地展示数据,例如汇总或者分类。本篇将详细...

    jQuery合并单元格

    在网页开发中,jQuery是一个非常流行的JavaScript库,它极大地简化了DOM操作、事件处理和Ajax交互。"jQuery合并单元格"这个主题涉及到在HTML表格中合并单元格的技术,这对于创建复杂的表格布局或呈现数据时非常有用...

    table-rowspan表格自动合并单元格插件

    3. **单元格合并**:在网页开发中,如果需要将多个相邻的单元格合并成一个大单元格,可以使用`rowspan`和`colspan`属性。`colspan`与`rowspan`类似,但作用于列的跨度。合并单元格可以提高表格布局的复杂性和美感。 ...

    Extjs 实现多行合并(rowspan)效果

    在ExtJS中实现多行合并(rowspan)的效果,通常是为了在数据表格中展示具有层次结构的数据,或者在某些特定情况下需要对表格行进行合并,以优化数据的展示。这通常涉及到对表格(GridPanel)的配置和自定义。下面...

    jQuery EasyUI v1.3.5官方API中文版

    总的来说,jQuery EasyUI v1.3.5提供了一个全面的前端解决方案,它允许开发者快速构建用户界面,同时保持代码的简洁和可维护性。通过深入学习和熟练运用其API,开发者可以提高开发效率,创造出用户体验优秀的Web应用...

    extjs3合并表头 rowspan

    ExtJS 3 是一个流行的JavaScript库,用于构建富客户端应用程序,尤其在数据网格和用户界面组件方面表现出色。"rowspan"属性在HTML表格中被用来合并行,而在ExtJS 3中,它用于实现类似的功能,即在数据网格的表头中...

    用Jquery获取table中td的值

    在JavaScript的世界里,jQuery是一个非常流行的库,它简化了DOM操作、事件处理和Ajax交互等任务。本篇文章将深入探讨如何使用jQuery来获取HTML表格(table)中的td(表格数据单元格)的值。首先,我们需要理解jQuery...

    37款开源jQuery表格插件

    它可以处理TH元素的ROWSPAN和COLSPAN属性,并支持隐藏域排序。 这些jQuery表格插件不仅提供了丰富的表格管理功能,而且大都是开源的,用户可以根据自己的需求选择合适的插件,进行免费下载和使用。使用这些插件可以...

    Html_CSS_JS_Jquery总结.doc

    10. **表格标签**:`&lt;table&gt;`、`&lt;tr&gt;`、`&lt;td&gt;`、`&lt;th&gt;`、`&lt;caption&gt;`、`&lt;thead&gt;`、`&lt;tbody&gt;`和`&lt;tfoot&gt;`等,用于创建和格式化表格,`rowspan`和`colspan`用于单元格合并,`cellspacing`和`cellpadding`调整单元格...

    合并单元格例子(jquery)

    在网页开发中,jQuery是一个非常流行的JavaScript库,它极大地简化了JavaScript代码的编写,使得DOM操作、事件处理、动画效果以及Ajax交互变得更加便捷。在这个"合并单元格例子(jquery)"中,我们将探讨如何利用...

    动态合并单元格JQUERY.txt

    ### 动态合并单元格JQUERY #### 背景介绍与应用场景 在网页开发过程中,经常需要处理表格数据的展示。特别是在数据统计、报表显示等场景下,合并相同内容的单元格能够使得数据更加清晰易读。jQuery作为一种广泛...

Global site tag (gtag.js) - Google Analytics