2013-10-04 6 views
2

У меня есть немного борьбы, чтобы пройти через неупорядоченный список, который создается kendo-ui. Глядя на его разметки, это выглядит следующим образом:Прокрутка по неупорядоченному списку с использованием Javascript

<ul data-role="listview" data-style="inset" data-type="group" id="unitlist"> 
    <li> 
     <li> 
      <ul> 
       <li id="signalRconveyanceId-P32-HMU-01"> 
        <a href="/UnitDetails/Index/1">P32-HMU-01 
         <span class="statusicon" style="background-color: #468847"></span> 
        </a> 
       </li> 
       <li id="signalRconveyanceId-P32-HMU-02"> 
        <a href="/UnitDetails/Index/2">P32-HMU-02 
         <span class="statusicon" style="background-color: #b94a48"></span> 
        </a> 
       </li> 
       <li id="signalRconveyanceId-XOS-STAGING"> 
        <a href="/UnitDetails/Index/3">XOS-STAGING 
         <span class="statusicon" style="background-color: #468847"></span> 
        </a> 
       </li> 
       <li id="signalRconveyanceId-NWI-100"> 
        <a href="/UnitDetails/Index/4">NWI-100 
         <span class="statusicon" style="background-color: #"></span> 
        </a> 
       </li> 
      </ul> 
     </li> 
    </li> 
</ul> 

Мой Javascript выглядит следующим образом:

var listItems = $("#unitlist li"); 
listItems.each(function(li) { 
    console.log(li); 
}); 

я могу получить строки из списка AllRight, но все это я получаю из них является их номер индекса, который в этом случае равен [0, ..., 6]. Мне действительно нужно получить id-часть signalRconveyanceId-XXYY для каждого элемента списка. Как я смогу это сделать?

+0

увидеть эту скрипку http://jsfiddle.net/krish/Tjmck/ – krish

+0

Спасибо, я получил решение из ответа ниже :) –

+2

@NicklasWinger: фундаментальный момент, который, по-видимому, не объясняется в различных (в противном случае правильных) ответах: Первый аргумент ['each' ] (HTTP: // api.jquery.com/each/) callback - это индекс элемента в наборе jQuery, а не элемент. Элемент доступен как 'this', или как второй аргумент, если вы предпочитаете. –

ответ

8

Попробуйте использовать jquery attr() как,

var listItems = $("#unitlist li"); 
listItems.each(function(li) { 
    console.log($(this).attr('id')); 
}); 

Как ваш HTML показал вам следует выбрать элемент списка как

var listItems = $("#unitlist li ul li"); 

Обновлено

var listItems = $("#unitlist li ul li"); 
listItems.each(function(index,li) { 
    console.log(li.id); 
}); 

Updated fiddle

+1

'$ (this) .attr (" id ")' - это смехотворно длинный и ненужный способ писать 'this.id'. Кроме того, принятие первого аргумента «каждого» обратного вызова как «li» вводит в заблуждение. Это * не * 'li', это индекс в наборе jQuery. (* Edit: * Не мой dv! Это кажется неуместным. Но это правда, что ваш ответ, похоже, говорит о том, что проблема заключается в том, что OP не использует 'attr', когда на самом деле проблема в том, что OP использовал' li ', а не' this'. Вы должны действительно посмотреть на свой код, чтобы увидеть реальное исправление. Возможно, вы захотите его исправить.) –

+0

Спасибо! Он работает так, как мне нужно. –

0

В коде li не на самом деле элемент - это индекс. Вы можете обратиться к каждому из li элементов с использованием this ...

var listItems = $("#unitlist li"); 
listItems.each(function() { 
    console.log(this.id); 
}); 
Смежные вопросы