这些空标识符的创建似乎只发生在 Firefox 上。但我检查过的所有浏览器似乎都发生了类似的情况,只是不太明显。使用 Chrome 和 Opera,您可以看到父级上的活动更改div
,没有任何最终效果。在 IE 中,情况非常微妙,DOM 树中没有任何东西真正引人注目,但样式窗口中仍然有轻微的闪烁。表明它也在响应同一件事。
当我仔细研究了一下 jQuery 文档中关于可以传递给.find()
方法似乎掌握了最好的线索:
包含用于匹配元素的选择器表达式的字符串。
用于匹配元素的元素或 jQuery 对象。
https://api.jquery.com/find/ https://api.jquery.com/find/
我将此解释为您不能直接传递数据属性,而是必须过滤包含该属性的元素本身。那么修复就会非常简单。罪魁祸首:
.find("[data-animation]");
将其包装在 jQuery 对象中可以使该功能正常工作:
.find($("[data-animation]"));
这实际上解决了问题,但假设是错误的。使用数据属性应该符合选择器表达式的条件。如果另一个答案可以提供此查询对父级的影响的完整解释,OP 应该随意接受另一个答案。到目前为止我只注意到以下几点:
- 这不仅仅是一个问题
data
但与所有属性一起发生
- 与使用类相关,具有 id 的元素不会受到影响
- 与使用没有任何关系
.each()
至少循环
- 可能是最奇怪的......使用时没有这样的问题
.children()
instead
最后一个非常令人困惑,因为两种方法非常相似。但搜索文档我确实发现了差异,只是.find()
has a 选择器上下文 https://api.jquery.com/jquery/#selector-context这看起来就是问题的根源。
这是一个奇怪的例子,其中 null id 出现在body
如果上下文设置为:
Demo http://codepen.io/anon/pen/bVRYYw?editors=001
当省略第二个参数时它会完全消失......
原始代码的工作示例,包括其他一些细微的调整:
Pen http://codepen.io/anon/pen/LpLLXo?editors=001
var groups = $('.group');
$(window).on('scroll resize orientationchange', showGroup);
function showGroup() {
groups.each(function() {
var group = $(this),
elements = group.find($('[data-animation]'));
});
}