我想输入一个if,只要jquery对象的值为空且dom元素不是标签或span。所以我有
$('.container').children().each(function (index, item2){
if ($(item2).val()=== '' && (item2.tagName.toLowerCase() !== 'label' || item2.tagName.toLowerCase() !== 'span')){
//do stuff here
console.log("tag: "+item2.tagName.toLowerCase());
}
});
但在控制台我得到了
tag: label
意味着它无法正常工作。我错过了什么吗?
答案 0 :(得分:2)
您的情况有误,请尝试以下:
$('.container').children().each(function() {
if ($(this).val() !== '' && !$(this).is('span') && !$(this).is('label')) {
console.log("tag: "+item2.tagName.toLowerCase());
}
});
但span
和label
没有value
属性,如果您要检查该元素是否没有子元素(包括文本节点),则 {{ 3}} 选择器。
$('.container').children().each(function() {
if (!$(this).is(':empty, span, label')) {
console.log(this);
}
});
<强> :empty 强>
答案 1 :(得分:1)
如果您想在值不为空时输入条件,则需要使用!==
代替===
。
if ($(item2).val() !== '' && (item2.tagName.toLowerCase() !== 'label' || item2.tagName.toLowerCase() !== 'span')) {
// your code...
}
答案 2 :(得分:1)
我会把它重写为
$('.container').children().each(function (index, item2){
if ( item2.value ) {
}
});
跨度或标签没有值,因此无论如何都会使条件失败
答案 3 :(得分:0)
您的代码是:
$('.container').children().each(function (index, item2){
if ($(item2).val()=== '' && (item2.tagName.toLowerCase() !== 'label' || item2.tagName.toLowerCase() !== 'span')){
console.log("tag: "+item2.tagName.toLowerCase());
}
});
在这里你写下你的情况: - $(item2).val() === '' && (item2.tagName.toLowerCase() !== 'label' || item2.tagName.toLowerCase() !== 'span')
首先,如果你想允许非空值元素使用!==
而不是===
(正如@Rory McCrossan建议的那样)。
现在我们谈谈你的第二个条件,即 - (item2.tagName.toLowerCase() !== 'label' || item2.tagName.toLowerCase() !== 'span')
表示您允许if元素为LABEL
或SPAN
。
所以,你的情况分为四种方式 -
(false || true ) ====> true // Element is label
(true || false ) ====> true // Element is span
(true || true ) ====> true // Element is not a span and not a label
(false || false ) ====> false // Element is a span and also an label [this condition never satisfied]
我想,你错了。您应该使用以下条件(如果您不允许这两种类型的元素) -
$(item2).val() === '' && (item2.tagName.toLowerCase() !== 'label' && item2.tagName.toLowerCase() !== 'span')
简而言之,您必须使用&&/AND
而不是||/OR
。