2010-03-29 168 views
0

这里是我的HTML:jQuery的 - 遍历DOM

    <li> 
         <div class="menu_inner"> 
          <a href="#"> 
           <div class="button"><img class="486" src="images/portalbutton.png" /></div> 
           <div class="prod_description">&nbsp;</div> 
          </a> 
         </div> 
        </li> 

我想添加一个。点击()函数来.prod_description,单击事件应该从li元素的CSS应用背景色。

使用此代码:

$(".prod_description").mousedown(function() { 
    $('#toolbar').css('background-color', $(this).parent().css('background-color')) 
}) 

我不似乎能够得到正确的$(this).parent()组合....

回答

3

可以是这样做的:

$(".prod_description").mousedown(function() { 
    $('#toolbar').css('background-color', $(this).closest('li').css('background-color')) 
}); 

.parent()得到直接父母,你想要上升几个级别(<a>,<div>, <li>)。 .closest('li')爬上父母并得到第一个是<li>。在这种情况下,.parent('li')也可以工作:)

+0

在我的一些代码快速分析暗示。家长(“礼”)比.closest(“礼”快),有人可以证实/反驳这个吗? (当然,假设你只有一个父li)。 – 2010-03-29 10:09:46

+1

@David - '.parents()'具有不同的行为,它会抓取所有父母的DOM根目录,然后匹配选择器。它可以更快(取决于'.closest()'匹配的距离),然而'.parents()'越来越慢,越是嵌套越深,所以它对于一个“浅”DOM只会更快我猜是描述它的方式。但是为了等价,你必须进一步过滤:'.parents('li:first')',如果你已经在寻找你想要的东西,那甚至不是等价的,'.parent()'和'.parents()'不会找到。 – 2010-03-29 10:48:26

1

在JavaScript中,您必须使用 backgroundColor而不是 background-color

更新:事实证明,jQuery是能够处理both formats,甚至DOM API本身让你做这样的事情:obj.style.setProperty('background-color', 'red');

+1

他正在使用jQuery css(http://api.jquery.com/css/)函数,该函数接受一个参数,该参数是CSS属性的实际名称。 – 2010-03-29 10:09:46

+0

感谢您提供的信息,从未意识到jQuery能够翻译它。 – jholster 2010-03-29 10:48:06

0

使用click事件,而不是鼠标按下。使用closest得到li元素

$("div.prod_description").click(function() { 
    $('#toolbar').css('background-color', $(this).closest('li').css('background-color')) 
}); 

我在单击事件也使用标签选择。如果你可以给一个CSS类的背景颜色,那么你可以使用这样的事情

li.mybg { background-color: #a9a9a9; } 

<li class="mybg"> 
    <div class="menu_inner"> 
     <a href="#"> 
     <div class="button"> 
      <img class="486" src="images/portalbutton.png" /> 
     </div> 
     <div class="prod_description">&nbsp;</div> 
     </a> 
    </div> 
</li> 

$("div.prod_description").click(function() { 
    $('#toolbar').addClass('mybg'); 
}); 
+0

我也第一次推荐使用click(),直到我在释放鼠标按钮(AFAIK)后意识到click()触发,这可能不是所需的行为。 – jholster 2010-03-29 10:01:53