我有一个
<li data-name="hello">hello</li>
我还将几个参数推入一个数组 所以例如 var array = []; array [0] = a:你好b:再见c:seeyou
所以现在我想做的是 1)点击li检索数据名称值“hello” 2)检查阵列的“hello”是否有另一个元素“hello” 3)如果匹配,获取索引位置并从数组中删除该索引 (因为
这是我用来匹配的代码
found = $.inArray($(this).attr("data-name"), array);
我放在
$(".li").click(function(){
alert("data name is " + $(this).attr("data-name"));
found = $.inArray($(this).attr("data-name"), array);
alert(found);
alert("name of element is " + array.a);
});
正如我之前所说,当我附加
使用上面的代码我已成功检索匹配的数据名称“hello”和元素“hello”,但我的发现返回-1,这意味着它不匹配。当我的警报结果匹配时,不知道为什么它不匹配?感谢
答案 0 :(得分:0)
你的数组变量包含一个对象数组,你不能搜索“hello”你需要找到object.a == 'hello'
为此你可以使用grep(http://api.jquery.com/jquery.grep/)
$(function() {
var array = [ { a: "hello", b: 'there'} , { a: "world", b: 'hi'} ];
var stuff = 'hello'; // <- this can be $(this).attr("data-name")
var found = $.grep(array, function(n) { return n.a == stuff; });
// found will be a list of results - we only want the first one
if (found.length == 1) {
alert('found: ' + found[0].a);
}
});
小提琴:http://jsfiddle.net/yQat2/3/
更新:
为了澄清grep
接受数组和函数,函数必须执行比较,这将对输入数组中的每个元素进行。 Grep返回比较成功的所有项目。在我们的示例中,它将返回具有a
属性== stuff
的所有元素。这是$(this).attr("data-name")
应放在代码中的地方。
在你的情况下,我假设每个a
项都是唯一的,所以我检查结果是1,如果是,我们显示为第一个元素找到的名称。