我有一个网络应用程序,它使用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
作为下一个兄弟,我可以修改选择器以不包含该对象吗?
答案 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');
}