2015-07-08 3 views
0

Учитывая следующий HTML:Почему мой селектор jQuery не возвращает никаких элементов?

<table>  
    <tbody>  
     <tr data-week="0"> 
      <td class="timeSlot" data-day="0" data-timeslotid="0"></td> 
      <td class="timeSlot" data-day="0" data-timeslotid="1"></td> 
      <td class="timeSlot" data-day="0" data-timeslotid="2"></td> 
      <td class="timeSlot" data-day="0" data-timeslotid="3"></td> 
      <td class="timeSlot" data-day="0" data-timeslotid="4"></td> 
      <td class="timeSlot" data-day="1" data-timeslotid="0"></td> 
      <td class="timeSlot" data-day="1" data-timeslotid="1"></td> 
      <td class="timeSlot" data-day="1" data-timeslotid="2"></td> 
      <td class="timeSlot" data-day="1" data-timeslotid="3"></td> 
      <td class="timeSlot" data-day="1" data-timeslotid="4"></td> 
     </tr> 
    </tbody> 
</table>  

и сценарий:

$(document).ready(function() { 

    var week = $("table tbody tr[data-week='0']"); 
    var dayTimeSlots = $(".timeSlot[data-day='0']", week); 
    console.log($(dayTimeSlots).length); // <-- Gives me 5 
    var timeSlot = $("[data-timeslotid='1']", dayTimeSlots); 
    console.log($(timeSlot).length); // <-- Gives me 0?? 

    var temp = $("[data-timeslotid='1']", week); 
    console.log($(temp).length); // <-- gives me 2 
}); 

Почему я не могу получить этот единственный элемент из моего JQuery подмножества?

Это пример ошарашен, но в моем коде у меня есть около 500 000 тд элементов, и мне нужно отфильтровать его до самого узкого подмножества, которое я могу по соображениям производительности.

Fiddle: http://jsfiddle.net/wp36nLnw/4/

ответ

4

Проблема в том, что контекстная селектор, который вы используете:

var timeSlot = $("[data-timeslotid='1']", dayTimeSlots); 

Является эквивалентом использования find(). Это означает, что он ищет элементы с атрибутом data-timeslotid как дочерние объекты из объекта dayTimeSlots. Вместо этого вам необходимо использовать filter(), чтобы уменьшить согласованный набор на основе предоставленного селектора. Попробуйте это:

var timeSlot = dayTimeSlots.filter("[data-timeslotid='1']"); 

Updated fiddle

+0

Отлично! Это исправило это. – Scottie

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