2011-06-08 118 views
0

在试图针对特定的div,我使用下面的代码:jQuery的父元素问题

function popupBox($area){ 
     //$mainBox = $(document).createElement('div').attr('id', 'mainBox'); 
     $mainBox = $('<div></div>').attr('id', 'mainBox'); 
     $($mainBox).text('main box responding'); 

     $parent = $('div#custom-page-node-block-output-right div.views-row').parent($($area)); 
     $($parent).addClass('parent'); 

}

唯一的问题是,有2周的div类DIV#定制-page-node-block-output-right div.views-row。 我虽然因为其父母我正在寻找的源元素是在两个div中的一个,我应该只得到一个单一的元素作出回应,但它返回两个。

您可以在http://test5omniforce.co.uk/node/3(最好在Firefox中查看)中看到问题的实际行动。只要将鼠标悬停在任一平面图上的任何蓝色房间上。

这个想法是让鼠标悬停在任何房间的直接父母上的绿色背景,但我得到了两个。很明显,因为我使用的是类而不是ID,但我不能在此解决方案中使用ID。

任何人都可以建议,如果有办法达到预期的效果与调整我的代码?

感谢

+1

jQuery中的ID对于您的信息必须是唯一的,如果您设置2个具有相同类名的项目并给它们一个1和2的ID,这将使它们成为唯一的元素。 – John 2011-06-08 19:36:28

回答

1

你试过:

$('div#custom-page-node-block-output-right div.views-row').parent($($area)).first(); 

或:

$('div#custom-page-node-block-output-right div.views-row').parent($($area)).last(); 

一个或另一个可能的工作,但我与约翰同意,该ID的应该是唯一的。

这里是一个的jsfiddle例如:http://jsfiddle.net/nxGjA/2/

+0

更新了我的回答,在问题中使用了更多的代码并添加了一个jsFiddle示例。 – 2011-06-08 19:47:14

+0

谢谢约翰和仁。我同意你的看法,ID必须是唯一的。这就是为什么我不能在这个解决方案中使用ID的原因,因为该网站生成的div和我的代码动态搜索他们。如果我使用ID,我将不得不为每个div编写单独的代码 - 不是非常动态 – sisko 2011-06-08 21:43:15

1
$parent = $($area).parents('div.views-row'); 
$parent.addClass('parent'); 

注:如果元素是一个jQuery元素(如$父,因为它是从一个jQuery调用返回),你不必把它包在$()。还要注意,$ area不是一个jQuery对象,只是一个传入的HTML元素。

+0

$ area是从另一个函数传入的任何元素。所以,当我开始寻找它的父项时,我只是将它包装在jQuery中 – sisko 2011-06-08 21:48:56