0

我有下面的 jQuery,当输入值(在数组中)与 .adiv 的 html (在数组中)匹配时,我会收到一个警报,说是真的,但只有当两个数组中的所有值都匹配时才会发生这种情况。我想要做的是,如果临时数组中的所有值都与 divar 数组中的任何值匹配,则返回 true。所以例如。如果.adiv html 是this is a div并且输入值是this div返回trueis div返回true 等,但是如果输入值是thisisadiv或例如isa divORrandom words返回false。此外,如果临时数组包含一个不在 divar 数组中的单词,它应该返回false

http://jsfiddle.net/7Q4CJ/

jQuery.fn.compare = function(t) {
    if (this.length != t.length) { return false; }
    var a = this.sort(),
        b = t.sort();
    for (var i = 0; t[i]; i++) {
        if (a[i] !== b[i]) { 
                return false;
        }
    }
    return true;
};
$("button").click(function() {

    var inputstr = $(".searchval").val().replace(/ /g, ",");
    var temp = new Array();
    temp = inputstr.split(",");

    var dival = $(".adiv").html().replace(/ /g, ",");
    var divar = new Array();
    divar = dival.split(",");

    alert($(temp).compare(divar)); 
});

​</p>

4

3 回答 3

1

经过几次国内中断....

jQuery 的.each()结合.inArray()可以帮助使代码合理简洁。

坚持.compare()插件的原始概念,我得到了这个:

jQuery.fn.compare = function(t) {
    var match = true;
    this.each(function(i, word) {
        if($.inArray(word, t) === -1) {
            match = false;
            return false;//equivalent to break
        }
    });
   return match;
};

这是一个演示

于 2012-05-06T20:08:56.260 回答
0

试试这个http://jsfiddle.net/nandu8201/SsSna/1/

估计应该够了。如果为假,您将得到-1,如果为真,您将得到0

于 2012-05-06T17:35:43.740 回答
0

或使用 underscore.js 的单行版本:

jQuery.fn.compare(t){
    _.any(this, function(item){ return _.indexOf(t, item) !== -1; });
}
于 2012-05-07T01:02:57.987 回答