尝试向委托()添加层次结构约束

时间:2010-10-25 19:17:03

标签: javascript jquery

我有一个委托声明,其作用如下:

$("body").delegate("tr[type='option']",'mouseenter',function(){

问题是它从我不想要的表中获取元素。所以我试过了:

$("body").delegate("table[class='ms-MenuUI'] > tr[type='option']",'mouseenter',function(){

这根本不起作用(虽然我没有收到任何控制台错误)。只是想知道我怎么能收紧它所以它只是从我想要的特定表中抓取表格行。

注意:页面加载时DOM中不存在该表,并且在文档准备好后动态创建/销毁该表,因此需要委托开始。

编辑: 根据我在下面的评论,我使用[]因为父项的属性是可变的,我的理解是它们应该与属性简写(即'。')互换。动态代码的示例如下:

$('body').delegate('table[' + parentAttribType + "='" + parentAttribValue + "'] > tr[" + rowAttrbType + "='" + rowAttribValue + "']"), 'mouseenter', function(){

谢谢!

3 个答案:

答案 0 :(得分:1)

您应该将类​​选择器.用于类,而不是属性选择器[]

$("body").delegate("table.ms-MenuUI > tr[type='option']",'mouseenter',function(){

此外,您的浏览器可能会引入tbody元素。如果可以,请删除>

答案 1 :(得分:1)

使用它,事件处理程序使用'tr td'作为事件目标绑定到表。

$('table[class=ms-MenuUI]').delegate('tr td', 'mouseenter', function() {

});

仅供参考 -

如果您打算使用$('body').delegate('', ),那么最好使用.live()将事件处理程序绑定到文档级别。

编辑:抱歉没有阅读您的整个帖子,将事件委托给包含该表的元素,或者使用.live()。

答案 2 :(得分:0)

应该有效:

$("table[class=ms-MenuUI] tr td").live('mouseenter',function(){
  /* yout code*/
});

live就像绑定但可以在dhtml上运行。