1

jquery を使用して dom に HTML を挿入する Web アプリがあります。

    $('<div />').html('<span class="' + someID + '-id">SomeText</span>').insertAfter($(".someidentifier"));

私が抱えている問題は、someidentifierクラスを持つ多くの要素が存在する可能性があり、それらのそれぞれで、このコードが2つある場合、想像できるように実行されることです:

    <div class="someidentifier">Some text</div>
    <div class="someidentifier">Some text</div>

このコードは、dom で以下を生成します。

    <div class="someidentifier">Some text</div>
         <span class="3123564654-id">SomeText</span>
         <span class="3123564654-id">SomeText</span>
    <div class="someidentifier">Some text</div>
         <span class="3123564654-id">SomeText</span>
         <span class="3123564654-id">SomeText</span>

どこにあるべきか:

    <div class="someidentifier">Some text</div>
         <span class="3123564654-id">SomeText</span>
    <div class="someidentifier">Some text</div>
         <span class="3123564654-id">SomeText</span>

そのため、.next()関数を使用して、出力しようとしているクラスが次の兄弟にあるかどうかを確認し、そうであれば挿入をキャンセルすることを考えました。これは、私が言っているように理解できない部分であり、insertAfter(jQueryObject)それを傍受してキャンセルする方法がわかりません。jQueryObjectこの場合はdivすでに両方になるため、if ステートメントを使用できないことに注意してください。

次の兄弟としてのspanクラスを持つオブジェクトがある場合、セレクターを変更してオブジェクトを含めないようにすることはできますか?3123564654-id

4

2 に答える 2

2

someidentifierコードが複数回実行される場合、次のような新しいプロパティを持つ要素を持つ要素を除外できます

var someID = '3123564654';
var targets = $(".someidentifier").filter(function () {
    var $next = $(this).next();
    return !$next.length || !$next.children('span').hasClass(someID + '-id')
});
$('<div />').html('<span class="' + someID + '-id">SomeText1</span>').insertAfter(targets);

デモ:フィドル

于 2013-11-04T02:26:15.540 に答える
0

などで確認してみてはどうでしょうか...

if ( $(this).has(someID).length == 0) ) 

    {
        $(this).append('whateverYouNeedToAppendHere');
    }
于 2013-11-04T02:28:30.627 に答える