jQuery 1.5.1 Sizzle'无法读取属性nodename'child'>'
jQuery 1.5.1 Sizzle 'cannot read property nodename' child '>' selector with knockoutjs
我使用的是jQuery 1.5.1和Knockoutjs 2.0.0。我的情况有点复杂,但据我所知,情况如下:
我有一些绑定到Knockoutjs的元素,它们也有jQuery.live绑定。其中一些绑定包含子(父?)选择器">"。当我删除元素(使用Knockout)时,我会得到以下错误:
未捕获的类型错误:无法读取null 的属性"nodeName"
由jQuery中的以下代码引发:
">": function (checkSet, part) {
...
for (; i < l; i++) {
elem = checkSet[i];
if (elem) {
var parent = elem.parentNode;
checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
//Uncaught TypeError: Cannot read property 'nodeName' of null
}
}
...
Knockout似乎是在jQuery开始检查活动绑定之前从文档中删除元素,所以当最终检查元素时,它的父元素为null,并抛出此错误。
我的问题:
人们会建议我在哪里/如何解决这个问题?我在想这样的事情:
var parent = elem.parentNode;
checkSet[i] = parent && parent.nodeName.toLowerCase() === part ? parent : false;
如果父项为null,">"选择器似乎应该失败,但我可能错了。你们会怎么做?
更新:
JSFiddle演示问题(尝试删除表行):
只有当我使用下面的选择器之一进行.live绑定时,才会发生这种情况。在:not选择器中只使用一个类会导致错误消失。
'.grid:not(.anything, .anythingelse) > tbody > tr'
'.grid:not(.anything, .anythingelse) tbody > tr'
当您将一个类传递给:not()
时,错误似乎消失了,原因是它随后成为了一个有效的CSS3选择器,因此它被传递到querySelectorAll()
,完全跳过Sizzle。有关详细信息,请参阅此问题。
我不确定你在>
中看到的行为是否是Sizzle的错误,如果是的话,它是否已经得到了解决(从jQuery 1.8开始),但由于CSS选择器保证能像浏览器所承诺的那样接近规范,所以我只能建议使用你现有的解决方法。
相关文章:
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 全局变量和全局对象的属性之间有什么区别吗
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- 序列化数据属性中对象的最可靠方法
- 分析高度属性时出现意外值{{specs.height}}.index.html
- TypeError:无法读取属性'推'未定义的JavaScript
- 同样,同样的错误'ahorcado.js:26未捕获类型错误:无法读取属性'beginPath'
- AngularJS-使用'true'属性
- 可以't使用JavaScript获取width属性
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- JavaScript Pub/Sub属性访问问题
- 从JavaScript访问struts操作中的属性
- 是否可以从父类访问子类的属性
- 如何更改reactjs中外部/独立组件的状态或属性
- 元素的属性nodeName会自动变为lowerCase
- jQuery 1.5.1 Sizzle'无法读取属性nodename'child'>'
- bs-tooltip TypeError: 无法读取未定义的属性“nodeName”
- 为什么我得到“;未捕获的类型错误:无法读取属性'nodeName'“为空”;在我的剧本中