我正在使用直接DOM操作构建一个非常基本的HTML表创建器/编辑器(基于designMode iframe)。这很痛苦,显然是因为Internet Explorer。
在designMode中,插入编辑区iframe的表格可以调整大小,并且可以自由编辑单元格的内容。在Firefox中,还可以添加和删除行和列。我目前专注于编辑边框宽度,前景色和背景色以及其他需要DOM工作的东西。
问题是IE6 / 7中缺少适当的DOM选择/范围功能。我无法找到几个同时选中的单元格的包含节点。对于单个单元,它可以使用parentElement,但对于多个选定的单元,parentElement是容纳TD单元的TR节点。由于缺少anchorNode,focusNode和W3C DOM提供的各种偏移,我无法弄清楚如何仅将节点引用提取到TR中已选择的那些TD单元。
我已经为单个单元格以及为符合W3C标准的浏览器实现的所选单元组创建了表格和样式修改,但我完全坚持使用IE实现。 jQuery可以帮助我吗?我从来没有使用它,但它看起来足够直观,它将花费更少的时间来掌握,而不是单独使用IE DOM来解决这个问题。
有三种基本的样式修改方案需要工作:
在Firefox中,我已经拥有了所有三种方案的代码。现在我需要一个跨浏览器的解决方案。有人能帮助我吗?
(IE的选择和范围问题之前已经讨论过了,但是在jQuery的上下文中没有讨论过。我发现这些问题一目了然:164147,218043,235411)< / p>
答案 0 :(得分:4)
如果我理解正确,您需要选择表格单元格的一般代码,以及更改选择的属性(CSS属性)。
你可以在jQuery中轻松完成。
var curTableCell = null; // "Softclicked" - not part of the selection (1)
// We call this in the click event below. You'd probably want this for keyboard events as well (for arrow key nav, etc.)
function softclick(element) {
$(curTableCell).removeClass('softclicked');
curTableCell = element;
$(element).addClass('softclicked');
}
$('td, th').click(function() {
if(keyHeld) { // Dunno how you do this (I'm not good at Javascript)
$(this).toggleClass('selected'); // Explicitly added/removed to/from selection (2)
} else {
softclick(this);
}
});
/* When you want to do something on selection: */
$('td.selected, th.selected').css({borderColor: 'red', borderWidth: '1px'});
/* When you want to do something on selected tables (3): */
$('td.selected, th.selected').parents('table')
.css({borderColor: 'red', borderWidth: '1px'});
$('td.selected, th.selected').parents('table').children('td') // Change things on all of table's cells
.css({borderColor: 'red', borderWidth: '1px'});
$('td.selected, th.selected, td.softclicked, th.softclicked').parents('table').children('td') // Change things on all of table's cells, including tables of "softclicked" cells
.css({borderColor: 'red', borderWidth: '1px'});
(我不太擅长Javascript或jQuery(我现在正在学习),但我希望这足以让你开始。)