我正在为IE填充polyfill,作为其中的一部分,我完全相信我需要在DOM中制作一些“假”元素。
作为其中的一部分,当用户使用任何函数从DOM获取jQuery包装的元素时,我希望jQuery认为它们是“不存在的”。 这是一个例子:
考虑这个HTML:
<div id="exampleContainer">
<div class="1"></div>
<div data-fake class="2"></div>
<div class="3"></div>
<div data-fake class="4"></div>
<div class="5"></div>
<div class="6"></div>
</div>
如果我在jQuery中使用此代码:
var a = $("#exampleContainer").children().length;
var b = $("#exampleContainer > *").length;
a和b都必须数为4,而不是6.另外:
var c = $("#exampleContainer > *").eq(2).prop('className');
c必须是5,而不是3。 等,等等....
如何使用jQuery执行此操作?
注意:我知道用户也可以直接使用DOM方法和属性,但至少目前来说,这对我来说不是一个问题。
答案 0 :(得分:1)
您可以尝试此操作(如果需要,请使用filter polyfill):
~function () {
var ps = $.fn.pushStack;
$.fn.pushStack = function (elems, name, args) {
return ps.call(this, elems.filter(function (el) {
return !$(el).is("[data-fake]");
}), name, args);
}
}();
alert([$("div").length, $("#exampleContainer > *").length])
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="exampleContainer">
<div class="1"></div>
<div data-fake class="2"></div>
<div class="3"></div>
<div data-fake class="4"></div>
<div class="5"></div>
<div class="6"></div>
</div>