2012-06-29 144 views
0

当我做 $('ul.latestnews ul li').parent().prev().text());我找回了目标li的内容。 (在这个例子中是word1或word2)。向孩子添加班级

但是当我做

$('ul.latestnews ul li').addClass($(this).parent().prev().text()); 

它不添加类。当我在最后一个语句上做一个console.log时,它只是返回所有我想要添加类的li。

我所试图做的是这样的:

<ul class="latestnews"> 
    <li>word1</li> 
    <ul> 
     <li>my class should become word1</li> 
     <li>my class should become word1</li> 
    </ul> 
    <li>word2</li> 
    <ul> 
     <li>my class must become word2</li> 
    </ul>   
</ul> 

哪儿我去错了吗?

+0

什么是'this' ..? –

+0

@Rob。窗口,我猜... – gdoron

+0

是不是HTML无效? –

回答

2

this只是里面一个jQuery功能的DOM元素,像each

$('ul.latestnews ul li').each(function(){ 
    $(this).addClass($(this).parent().prev().text()); 
}); 

Live DEMO this在你的代码可能是Window对象...

注意,这些种类的DOM遍历prev,parent如果稍微改变了DOM结构,就可以非常容易地中断,您可能想要使用基于元素类的其他选择器。

+0

快速问题bruv'.addClass(文本)'这会实现什么,这是什么? ++ 1反正就启示':)'生活! –

+0

@Tats_innit。我没有得到你的问题,但生活很好... :) – gdoron

+0

Saweet Bruv,Rocking \ m /;我的意思是这样做:'.addClass($(this).parent()。prev()。text());'它只是添加'word1 word2'作为类或更多,':P' –

1

我想的HTML代码是不完全正确,因为它应该是这样的:

<ul class="latestnews"> 
    <li>word1</li> 
    <li> 
     <ul> 
      <li>my class should become word1</li> 
      <li>my class should become word1</li> 
     </ul> 
    </li> 
    <li>word2</li> 
    <li> 
     <ul> 
      <li>my class must become word2</li> 
     </ul> 
    </li>   
</ul> 

则:

$("ul.latestnews ul > li").each(function(){ 
    var $this=$(this); 
    var className = $this.parents("li").first().prev().text(); 
    $this.addClass(className); 
}); 
+0

你是对的。这可悲的是joomla组件k2的默认输出。我将制作一个修复此错误的新K2模板。 – Jarco

+0

这里是jsfiddle:http://jsfiddle.net/bDNz8/ –

+0

替换'.parents(“li”)。first()'with =>'.closest('li')' – gdoron