0

以下のjQueryがあり、入力値(配列内)が.adiv(配列内)のhtmlと一致すると、trueというアラートが表示されますが、これは2つの配列のすべての値が正確に一致する場合にのみ発生します。私がやろうとしているのは、temp 配列のすべての値が divar 配列のいずれかの値と一致して true を返す場合です。だから例えば。.adiv html がthis is a divあり、入力値がthis divtrueをis div返す場合は true などを返しますが、入力値がthisisadivor の場合、たとえばisa divORはrandom wordsfalse を返します。また、一時配列に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/

それで十分だと思います。falseの場合は-1になり、trueの場合は0になります。

于 2012-05-06T17:35:43.740 に答える
0

またはunderscore.jsを使用した1行バージョン:

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