如果它不存在,我只想添加它
$('#main_state').append('<label class="check error" generated="true">This field is required.</label>');
所以我有一个循环,我只想在第一次添加它...任何想法?
答案 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')
元素