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>

どこで私は間違えましたか?

4

2 に答える 2

2

this次のような jQuery 関数内のみの DOM 要素ですeach

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

コード内のライブ DEMO thisはおそらくWindowオブジェクトです...

この種の DOM トラバーサルはprevparentDOM 構造を少し変更すると非常に簡単に壊れる可能性があることに注意してください。要素クラスに基づく他のセレクターを使用することをお勧めします。

于 2012-06-29T12:53:05.733 に答える
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);
});
于 2012-06-29T13:04:23.180 に答える