为什么我的 jQuery 选择器没有返回任何元素?
Why is my jQuery selector not returning any elements?
给出以下 HTML:
<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 个 td 元素,出于性能原因,我需要将其过滤到尽可能窄的子集。
Fiddle: http://jsfiddle.net/wp36nLnw/4/
问题是因为您当前使用的上下文选择器:
var timeSlot = $("[data-timeslotid='1']", dayTimeSlots);
相当于使用find()
。这意味着它正在寻找具有 data-timeslotid
属性的元素作为 dayTimeSlots
对象中那些元素的子元素。相反,您需要使用 filter()
来根据提供的选择器减少匹配集。试试这个:
var timeSlot = dayTimeSlots.filter("[data-timeslotid='1']");
给出以下 HTML:
<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 个 td 元素,出于性能原因,我需要将其过滤到尽可能窄的子集。
Fiddle: http://jsfiddle.net/wp36nLnw/4/
问题是因为您当前使用的上下文选择器:
var timeSlot = $("[data-timeslotid='1']", dayTimeSlots);
相当于使用find()
。这意味着它正在寻找具有 data-timeslotid
属性的元素作为 dayTimeSlots
对象中那些元素的子元素。相反,您需要使用 filter()
来根据提供的选择器减少匹配集。试试这个:
var timeSlot = dayTimeSlots.filter("[data-timeslotid='1']");