2013-11-04 77 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'); 
    }