2013-12-16 4 views
0

У меня есть массив (myElems) с объектами (элементами списка). Я хотел бы выловить из этого массива элемент с ID, соответствующий 'foo'. строка «Foo» в настоящее время хранится в вар «targetItem» Последнее, мне нужно, чтобы захватить, что соответствие position.top элементаИзвлечение объекта из массива на основе ID

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; 

... да, я знаю, что это мешанина ... Я не» знаю, как синтаксис этой

Благодарности

EDIT: создание 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> 
+0

Ваш myElems массив ссылок DOM? Также уточните, что вы подразумеваете под position.top. Вы имеете в виду атрибут CSS _top_? Или вы имеете в виду индекс найденного элемента в коллекции массива? – cbayram

+0

yes Позиция CSS – user3024007

ответ

0

Лучший способ, которым я могу думать о неосновной руке, чтобы просто перебрать массив и идти оттуда, используя Grep

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

Позвольте мне знать, если это работает для вас, то я буду править мой ответ на основе ваших комментариев. Это лучшее, что я могу дать вам, учитывая ваш код.

0

В ваниль js.

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

Это даст вам массив элементов, соответствующих «foo». Затем вы можете проверить, если у вас есть что-то там:

if(el.length > 0) el = el[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); 
        }); 

Fiddle: http://jsfiddle.net/Xt6Wh/2/

Проверьте ele.id получает требуемое значение. В скрипке я беру значение от div - просто чтобы показать, что логика работает. Я не уверен, откуда вы получаете ele.id. Поэтому я принял это предположение.

+0

Как использовать возвращаемое значение? закрыть его в var, например, для использования в другом месте? – user3024007

+0

'var newelement = function' ... check отредактированный ответ – Ani

+0

по какой-то причине он выдавал бы ошибку на' $ (myElem) .grep ... 'поэтому мне пришлось использовать' $ .grep (myElem, function ... ' (объект не имеет метода grep). Тем не менее 'newelement' возвращает' [] ', пустой массив? – user3024007

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/

+0

Мне нужно обратиться к массиву, так как это то, что создано динамически, и удерживает значение позиции в момент, когда данный элемент переносится в массив – user3024007

+0

@ user3024007 в соответствии с вашим кодом генерации myElems, это даст тот же результат. Значение верхнего атрибута CSS ссылается на ссылку DOM независимо от того, как вы ее получите. Возможно, вы можете уточнить. – cbayram

Смежные вопросы