根据ID从数组中检索对象

时间:2013-12-16 20:49:05

标签: javascript jquery

我有一个带有对象(列表项)的数组(myElems)。 我想从这个数组中找出一个ID匹配'foo'的元素。 'foo'字符串当前存储在var'targetItem'中 最后,我需要抓住匹配元素的position.top

var targetItem = 'foo'; // value of this var is set dynamically
$(myElems).grep(function(ele){
retun ele.id == menuItem;
});
var loc = // [returned from array].position.top;

...是的,我知道这是大杂烩...我不知道如何解释这个

由于

编辑: 创建myElems

var myElems = [];

    $('#menu').children('li').each(function() {
        myElems.push( $(this) ); 
    });

HTML:

<ul id="menu">
    <li id="foo">FOO ITEM</li>
    <li id="boo">BOO ITEM</li>
</ul>

4 个答案:

答案 0 :(得分:1)

<强> JS

var ele = $('#foo').attr('id')
var myElems = [];

$('#menu').children('li').each(function() {
    myElems.push( $(this).attr('id') ); 
});

var targetItem = 'foo'; // value of this var is set dynamically
var newelement =  $.grep(myElems, function( ele, i ){
                      return ele == targetItem ;
                     //console.log("This is the position of matched item - ", + i);
                   });

小提琴:http://jsfiddle.net/Xt6Wh/2/

检查ele.id是否获得了所需的值。在小提琴中,我从div获取值 - 只是为了表明逻辑是有效的。我不知道你从哪里得到ele.id。因此我接受了这个假设。

答案 1 :(得分:0)

我能想到的最好的方法是迭代数组并使用grep从那里开始

$.grep(myElems,function(value,id){
    return id == targetItem;
});

如果这对您有用,请告诉我,否则我会根据您的评论编辑我的答案。鉴于你的代码,这是我能给你的最好的。

答案 2 :(得分:0)

在香草js。

el = myElems.filter(function (elem) {
    return elem["id"] == "foo";
})

这将为您提供与“foo”匹配的元素数组。然后你可以检查一下是否有东西:

if(el.length > 0) el = el[0]

答案 3 :(得分:0)

// To get the correct element you can just stick to CSS id selector:
var target = $('#menu').children('li#' + targetItem);
// to get the CSS top value you can do
var top = target.css("top");

当然,如果存在没有目标元素的情况,您可以检查 target.length

http://jsfiddle.net/jeVSJ/