为孩子们添加课程

时间:2012-06-29 12:50:33

标签: jquery

当我这样做的时候 $('ul.latestnews ul li').parent().prev().text());我找回了目标李的内容。 (本例中为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>

我哪里出错了?

2 个答案:

答案 0 :(得分:2)

this是仅在jQuery函数内部的DOM元素,如each

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

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

请注意,如果稍微更改DOM结构,那些使用prevparent的DOM遍历可能会非常容易中断,您可能希望使用基于元素类的其他选择器。

答案 1 :(得分: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);
});