0

我想问一个问题,为什么这不起作用?

http://jsfiddle.net/2FMue/4/

var a = $('input').attr('value').split(',');

if(a instanceof Array) alert(1);

if($.inArray($('#id').text(), a)) alert(2);

if($.inArray('United State', a)) alert(3);

// a is array but no return correct match.

我将一个值拆分为数组并使用 $.inArray 检查字符串在数组中的位置。

但它不会返回正确的索引。

我不知道这个例子有什么问题。请指教。

非常感谢你。

4

5 回答 5

3

从文档:

因为 JavaScript 将 0 视为松散地等于 false(即 0 == false,但 0 !== false),如果我们要检查数组中是否存在值,我们需要检查它是否不等于(或大于) -1。

所以 :

if( $.inArray($('#id').text(), a) != -1) alert(2);
于 2013-02-13T00:43:09.033 回答
2

它工作得很好。

$.inArray返回在给定数组中找到的元素的索引(或者-1如果没有找到)。

举个例子,

$.inArray("United State", ["United State", "America"]) ===  0
$.inArray("Unknown", ["United State", "America"])      === -1

因此,为了检查元素是否存在于数组中,您必须使用:

if ($.inArray("Unknown", ["United State", "America"]) > -1) {
    // ...
}
于 2013-02-13T00:41:34.170 回答
2

$.inArray() 方法类似于 JavaScript 的原生 .indexOf() 方法,因为它在找不到匹配项时返回 -1。如果数组中的第一个元素与值匹配,则 $.inArray() 返回 0。

因为 JavaScript 将 0 视为松散地等于 false(即 0 == false,但 0 !== false),如果我们要检查数组中是否存在值,我们需要检查它是否不等于(或大于) -1。

在这里阅读更多:http: //api.jquery.com/jQuery.inArray/

于 2013-02-13T00:42:45.697 回答
2

搜索词是否是数组中的第一个元素?这将返回 0,javascript 将其视为 false。你的 if 语句应该是:

if($.inArray($('#id').text(), a) < 0) alert(2);

阅读文档http://api.jquery.com/jQuery.inArray/

于 2013-02-13T00:44:08.697 回答
1

拆分中的数组是基于 0 的索引,并且您要求的字符串是第一个,因此它返回 0 值 - 这是虚假的,因此您的条件内的警报不会触发,因为您从 0 索引数组。

将您的输入值更改为“fred,United State, America”,您将看到警报。

于 2013-02-13T00:53:58.667 回答