2013-11-04 50 views
0

我有到DOM使用jQuery来inser一些HTML网页应用程序:jQuery的.insertAfter()插入多次

$('<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

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

+2

看起来好像没什么问题http://jsfiddle.net/arunpjohny/Adu9U/1/ –

+0

的代码运行两次,其实永远我它看到它运行的divs的真实性。不能真正解释为什么,因为我在NDA之下,但不得不这样做。 – hjavaher

+0

换句话说,第一次代码运行它会插入他们就好,发送时间运行,它会再次插入跨度。所以我留下了4跨度,而不是仅仅2 http://jsfiddle.net/Adu9U/2/ – hjavaher

回答

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

+0

这很好,谢谢! – hjavaher

0

怎么样的东西,如检查.. 。

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

    { 
     $(this).append('whateverYouNeedToAppendHere'); 
    }