2

我正在寻找一种方法来执行以下操作:

$("#a" || "#b").val() === ""

相对于:

$("#a").val() === "" || $("#b").val() === ""

有任何想法吗?

提前致谢!

4

4 回答 4

3

对于两个要素,我相信您的示例尽可能简短,并且其含义很清楚。但是,如果您希望重复此类逻辑或评估更多元素,您可以通过创建一个简单的函数来评估集合中的任何项目是否匹配条件来改进它。

扩展 jQuery

$.fn.any = function (evaluator) {
    var items = $(this);
    for (var i = 0; i < items.length; i++) {
        if (evaluator(items[i]) === true) {
            return true;
        }
    }

    return false;
};

演示:http: //jsfiddle.net/xE76y/1/

这类似于Any()在 .Net LINQ库中实现的方法*(我确信在其他库中实现了,尤其是那些面向函数式编程的库)。在 c# 中,您将调用这样的方法:

enumerable.Any( o => o.Value == "" );

JavaScript 的语法(很遗憾)没有那么简洁;你最终会得到类似的东西:

array.any( function(o){ return o.value === ""; } );

到目前为止,这并没有为您节省任何东西。但是,如果您想迭代大量元素,它会变得更加优雅。

// there could be zero inputs or 100 inputs; it doesn't matter
var result = $("input").any(function (o) {
    return o.value === "";
});

原生解决方案

请注意,我们的any()方法中不依赖 jQuery。您还可以考虑使用原生 JavaScript 解决方案,Array.some()例如method

some() 对数组中存在的每个元素执行一次回调函数,直到找到一个回调函数返回真值。如果找到这样的元素, some 立即返回 true。

演示:http: //jsfiddle.net/xE76y/2/

var result = jQuery.makeArray($("input")).some(function (o) {
    return o.value === "";
});

由于这是一个数组方法,它只适用于数组。不幸的是,这意味着这document.getElementsByTagName("input").some(...)不起作用,因为getElementsByTagName()返回 a NodeList

当然,您可以将任何您想要的东西放入一个数组并调用some()该数组。示例中的调用jQuery.makeArray()只是为了方便。

抽象评估函数

演示:http: //jsfiddle.net/xE76y/3/

也许评估函数(例如测试空字符串)将被重用。这些可以进一步抽象。

// ideally, this should NOT be left in global scope
function isEmpty(input) {
    return input.value === "";
}

// the check now fits nicely in one line.
if ($("input").any(isEmpty)) {
    alert("At least one input is empty.");
}

生成的方法调用非常干​​净:$("#a, #b").any(isEmpty)$("input").any(isEmpty)


* 另外值得注意的是,LINQ 已经为 JavaScript 重新创建

于 2013-05-24T08:57:16.790 回答
2

Try like this instead:

 if ($('#a,#b').is(':empty'))
    {
      alert("Either a or b is Empty!");
     }

Try my demo

Edit:

If it is an input type like a textbox then it would be a little bit bulky but will achieve the same effect:

if ($.inArray("",[ $("#a").val(), $("#b").val() ])>=0)
{
    alert("Either a or b is Empty!");   
}

See another Demo

于 2013-05-24T09:14:10.107 回答
0

如果你想避免空字符串的重复"",你可以这样做:

if ($.inArray([ $("#a").val(), $("#b").val() ], ""))

或者,如果您只想使用 jQuery 选择一次:

if ($.inArray($("#a, #b").map(function() { return this.value; }), ""))

但我自己不会使用其中任何一个。可以说,与“简单”的方式相比,它们的效率更低、更做作,当然也更不可读!

于 2013-05-24T08:56:51.667 回答
-1

我不是javaScript方面的专家,但你有没有交叉检查过:

http://api.jquery.com/multiple-selector/

jQuery 选择器正则表达式

此外,一种方法是使用 .each 函数,如

jQuery 多 ID 选择器

于 2013-05-24T08:53:21.117 回答