只有在不存在时才添加

时间:2011-03-09 21:06:35

标签: jquery

如果它不存在,我只想添加它

$('#main_state').append('<label class="check error" generated="true">This field is required.</label>');

所以我有一个循环,我只想在第一次添加它...任何想法?

5 个答案:

答案 0 :(得分:2)

这样的事情应该做:

if ($('#main_state').html().indexOf('This field is required')==-1){
    $('#main_state').append('<label class="check error" generated="true">This field is required.</label>');
}

检查main_state中的html是否出现'This field is required' - 如果找不到-1,则按正常方式添加。

答案 1 :(得分:1)

if($('label.check[generated=true]').length === 0) {
   //do stuff...
}

答案 2 :(得分:1)

从我的评论:它似乎不依赖于任何循环变量,那么为什么不把这一行放在循环之前呢?


如果你不能这样做,那么简单的解决办法就是设置一个标志:

var added = false;

for(...) {
    if(!added) {
        // add the thing
        added = true;
    }
}

当然,这不是那种花哨,如果你第二次运行包含循环的代码,标签将再次添加。但是根据您的描述,您似乎总是希望在运行循环时添加标签。这个解决方案至少可以避免查询DOM。

答案 3 :(得分:1)

创建一个小的jquery插件,如:

$.fn.appendif = function (selector, content) {
  if ($(this).children(selector).length > 0) return this;
  $(this).append(content);
  return this;
}

使用以下其中一项:

$('#main_state').appendif('.check.error', '<label class="check error" generated="true">This field is required.</label>');

$('#main_state').appendif('label', '<label class="check error" generated="true">This field is required.</label>');

$('#main_state').appendif('label[generated="true"]', '<label class="check error" generated="true">This field is required.</label>');

我认为这是最简单的方法。

UPD:我的意思是,如果你在jquery风格的循环中这样做,这是最简单的方法。

答案 4 :(得分:1)

if( 0 ==  $('label[id=error_field]', $('#main_state') ).length )
{
    $('#main_state').append('<label id="error_field" class="check error" generated="true">This field is required.</label>');
}

我从头脑中写下了这个,但它应该有用,或至少给你一个想法。

使用:

$('label[id=error_field]', $('#main_state') ).length

jquery检查元素是否已在$('#main_state')元素

中排除