javascript - 如果 data-attribut 等于 0,“parents().filter”返回未定义
问题描述
这很好用,除非 data-* 等于“0”,任何人都可以解释原因。
如果我直接访问该属性,它可以正常工作,例如 $("#Floor0").data("floor") 按预期返回 0。
但是,如果我使用过滤器功能来查找具有 data-floor 的父级,如果父级 data-floor="0",它将不起作用。
如果我将 data-floor="0" 更改为 data-floor="00" 或任何其他值,它将起作用。
console.log($("#Floor2").data("floor"));
console.log($("#Floor1").data("floor"));
console.log($("#Floor0").data("floor"));
Test('a2');
Test('a1');
Test('a0');
function Test(id){
var FloorId = $("#"+id).parents().filter(function() {
return $(this).data("floor");
}).eq(0);
console.log(FloorId.data("floor"));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<div data-floor="0" id="Floor0">
<div>
<label>0</label>
</div>
<div>
<input type="checkbox" id="a0" />
</div>
</div>
<div data-floor="1" id="Floor1">
<div>
<label>1</label>
</div>
<div>
<input type="checkbox" id="a1" />
</div>
</div>
<div data-floor="2" id="Floor2">
<div>
<label>2</label>
</div>
<div>
<input type="checkbox" id="a2" />
</div>
</div>
</div>
<br>
<br>
解决方案
closest()
与选择器一起使用parents()
以避免在此处循环(它更快):因此您可以使用具有相同选择器而不是最接近的选择器的父母,但父母将测试所有父母,当找到第一个父母时最接近的停止。
Test("a0");
Test("a1");
Test("a2");
function Test(id) {
var FloorId = $("#" + id).closest("div[id^=Floor]");
//parents too
//var FloorId = $("#" + id).parents("div[id^=Floor]");
console.log(FloorId.data("floor"));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<div data-floor="0" id="Floor0">
<div>
<label>0</label>
</div>
<div>
<input type="checkbox" id="a0" />
</div>
</div>
<div data-floor="1" id="Floor1">
<div>
<label>1</label>
</div>
<div>
<input type="checkbox" id="a1" />
</div>
</div>
<div data-floor="2" id="Floor2">
<div>
<label>2</label>
</div>
<div>
<input type="checkbox" id="a2" />
</div>
</div>
</div>
<br>
<br>
推荐阅读
- arm - 为什么在ARM64指令集中找不到ARM32指令的机器码
- flutter - 如何在不调用 ModalRoute.withName 中的初始化状态并忘记路径的情况下使用 popuntil?
- ruby-on-rails - 如何将数组拆分为具有相同值的元素的子数组?(红宝石)
- css - 修改了图形的 css
- javascript - TypeError: Object(...) is not a function in export default createNavigatorFactory
- spring - 如何使用 thymeleaf 和 spring boot 按名称获取特定用户
- python - 将索引分配给矩阵中的真值的有效 numpy 方法
- spring - Spring AOP 代理 - @CacheEvict 在 @Entity 中不起作用(来自 JPA,非 Spring 类)
- google-drive-api - 使用 Google Drive API v3 PHP 按 id 获取文件大小
- c - GDB 在运行时打印不同的值