当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之后求得平均高度,设置上去就正确了。为什么是两倍,想想就清楚了。
分享到:
相关推荐
`jQuery.table.rowspan.js`是一个专为解决表格中单元格自动合并问题的jQuery插件。这个插件允许开发者在前端轻松处理复杂的表格布局,提高用户体验,同时也减轻了服务器端的计算压力。 ### 插件原理 `rowspan`属性...
在网页开发中,jQuery 是一个广泛使用的 JavaScript 库,它极大地简化了 JavaScript 的操作,包括对 HTML 文档的...开发者可以通过分析这个示例,学习到如何在实际项目中灵活运用 `rowspan` 和 jQuery 进行表格操作。
最后,需要指出的是,本文提供的是还原具有rowspan和colspan属性的表格的一种实现方法,实际上,网络上已经存在其他的解决方案和代码示例,如通过cellbreak插件来实现类似的功能,这些都是前端开发者在实际项目中...
jquery.table.rowspan.js
本文将围绕“含`rowspan`情况下的`table`画虚线问题”展开讨论,结合标签提供的“源码”和“工具”两个关键词,深入解析如何解决此类问题。 首先,`rowspan`是HTML `<td>`(表格数据单元格)标签的一个属性,用于...
同时,当表格数据动态变化时,要确保正确计算和调整 `colspan` 和 `rowspan` 的值,以保持表格的平衡和逻辑一致性。 此外,虽然现代前端框架和库如React、Vue等提供了更高级的表格组件,可以更方便地处理复杂的表格...
通过查看和学习这些示例,你可以进一步理解和掌握如何使用jQuery实现单元格合并。同时,为了保证代码的可维护性和性能,记得在编写代码时遵循良好的编程实践,如避免不必要的遍历和操作,以及合理地组织和注释代码。
在网页开发中,jQuery是一个非常流行的JavaScript库,它简化了DOM操作、事件处理以及动画制作。在这个"jquery行列合并例子"中,我们关注的是如何利用jQuery来实现HTML表格中的行和列合并,这对于数据展示或者创建...
本总结主要涵盖了从基础到实践的BIRT报表制作过程,以及在学习过程中遇到的问题及解决方案。 首先,我们来详细探讨如何制作一个简单的BIRT报表: 1. 创建报表工程:通过BIRT的项目向导,你可以创建一个新的BIRT...
在IT领域,jQuery DataTables是一款广泛使用的数据展示插件,它提供了丰富的功能,如排序、搜索、分页等。在某些场景下,我们可能需要对表格中的单元格进行合并,以便更好地展示数据,例如汇总或者分类。本篇将详细...
在网页开发中,jQuery是一个非常流行的JavaScript库,它极大地简化了DOM操作、事件处理和Ajax交互。"jQuery合并单元格"这个主题涉及到在HTML表格中合并单元格的技术,这对于创建复杂的表格布局或呈现数据时非常有用...
3. **单元格合并**:在网页开发中,如果需要将多个相邻的单元格合并成一个大单元格,可以使用`rowspan`和`colspan`属性。`colspan`与`rowspan`类似,但作用于列的跨度。合并单元格可以提高表格布局的复杂性和美感。 ...
在ExtJS中实现多行合并(rowspan)的效果,通常是为了在数据表格中展示具有层次结构的数据,或者在某些特定情况下需要对表格行进行合并,以优化数据的展示。这通常涉及到对表格(GridPanel)的配置和自定义。下面...
总的来说,jQuery EasyUI v1.3.5提供了一个全面的前端解决方案,它允许开发者快速构建用户界面,同时保持代码的简洁和可维护性。通过深入学习和熟练运用其API,开发者可以提高开发效率,创造出用户体验优秀的Web应用...
ExtJS 3 是一个流行的JavaScript库,用于构建富客户端应用程序,尤其在数据网格和用户界面组件方面表现出色。"rowspan"属性在HTML表格中被用来合并行,而在ExtJS 3中,它用于实现类似的功能,即在数据网格的表头中...
在JavaScript的世界里,jQuery是一个非常流行的库,它简化了DOM操作、事件处理和Ajax交互等任务。本篇文章将深入探讨如何使用jQuery来获取HTML表格(table)中的td(表格数据单元格)的值。首先,我们需要理解jQuery...
它可以处理TH元素的ROWSPAN和COLSPAN属性,并支持隐藏域排序。 这些jQuery表格插件不仅提供了丰富的表格管理功能,而且大都是开源的,用户可以根据自己的需求选择合适的插件,进行免费下载和使用。使用这些插件可以...
10. **表格标签**:`<table>`、`<tr>`、`<td>`、`<th>`、`<caption>`、`<thead>`、`<tbody>`和`<tfoot>`等,用于创建和格式化表格,`rowspan`和`colspan`用于单元格合并,`cellspacing`和`cellpadding`调整单元格...
在网页开发中,jQuery是一个非常流行的JavaScript库,它极大地简化了JavaScript代码的编写,使得DOM操作、事件处理、动画效果以及Ajax交互变得更加便捷。在这个"合并单元格例子(jquery)"中,我们将探讨如何利用...
### 动态合并单元格JQUERY #### 背景介绍与应用场景 在网页开发过程中,经常需要处理表格数据的展示。特别是在数据统计、报表显示等场景下,合并相同内容的单元格能够使得数据更加清晰易读。jQuery作为一种广泛...