Jquery .insertAfter()多次插入

时间:2013-11-04 02:16:59

标签: javascript jquery

我有一个网络应用程序,它使用jquery在dom上加入一些html:

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

我遇到的问题是,可能有许多带有someidentifier类的元素,并且对于每个元素,如果我有两个这样的代码,这个代码将会运行,如果我有两个:

    <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)而我不知道如何拦截并取消它。我应该注意,我不能在它周围使用if语句,因为在这种情况下jQueryObject已经div

如果选择器的span类为3123564654-id作为下一个兄弟,我可以修改选择器以不包含该对象吗?

2 个答案:

答案 0 :(得分:1)

如果代码被多次执行,那么您可以过滤掉具有新属性的下一个元素的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);

演示:Fiddle

答案 1 :(得分:0)

如何检查...... ...

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

    {
        $(this).append('whateverYouNeedToAppendHere');
    }
相关问题