如果条款不能正常工作

时间:2014-03-05 10:27:35

标签: javascript jquery if-statement

我想输入一个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

意味着它无法正常工作。我错过了什么吗?

4 个答案:

答案 0 :(得分:2)

您的情况有误,请尝试以下:

$('.container').children().each(function() {
    if ($(this).val() !== '' && !$(this).is('span') && !$(this).is('label')) {
        console.log("tag: "+item2.tagName.toLowerCase());
    }
});

spanlabel没有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元素为LABELSPAN

所以,你的情况分为四种方式 -

(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