如何使用jQuery无法获得某些元素

时间:2016-02-05 07:45:10

标签: jquery jquery-plugins

我正在为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方法和属性,但至少目前来说,这对我来说不是一个问题。

1 个答案:

答案 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>