访问jquery'这个'在绑定之后这个'

时间:2017-01-15 17:38:42

标签: javascript jquery this

如何绑定angular2 typescript并继续获取数组中的元素?

  jQuery(".filterTop").not(ele).each(function () {

                    if (jQuery(this).attr("datac") == "c")
                    {
                        this.readWrite += "," + jQuery(this).attr("dataval");
                    }

                }).bind(this);

你可以看到我需要绑定动词readWrite来自"这个"对于jquery .each,问题是我无法从jquery获得元素"这个",因为"这个"现在是另一回事。

使用事件时我可以传递事件然后使用event.target,但是.each不是一个事件。 任何想法?

感谢

1 个答案:

答案 0 :(得分:1)

使用jQuery

使用.each()回调的参数来获取当前迭代的值。然后,您.bind()可以保留外部this值。

jQuery(".filterTop").not(ele).each(function (i, el) {
  if (jQuery(el).attr("datac") == "c") {
      this.readWrite += "," + jQuery(el).attr("dataval");
  }
}.bind(this));

此外,您可以检查选择器字符串中的datac属性。

jQuery(".filterTop[datac='c']").not(ele).each(function (i, el) {
  this.readWrite += "," + jQuery(el).attr("dataval");
}.bind(this));

使用Vanilla(原生)JS

当然,如果没有jQuery,我们可以很容易地做到这一点。让我们首先为document.querySelectorAll创建一个包装器,这样它就不那么冗长了。

function qAll(root, sel) {
  if (typeof root === "string") {
    sel = root
    root = document
  }
  return root.querySelectorAll(sel)
}

现在我们可以简洁地写一些原生替代品。

Array.prototype.forEach.call(qAll(".filterTop[datac='c']"), function (el) {
  if (el !== ele) {
    this.readWrite += "," + el.getAttribute("dataval");
  }
}, this);

ES6解决方案是使用Array.from().forEach()以及箭头功能,这样它就不会影响您想要的this

Array.from(qAll(".filterTop[datac='c']")).forEach(el => {
  if (el !== ele) {
    this.readWrite += "," + el.getAttribute("dataval");
  }
});

或使用ES6 for-of循环:

for (var el of qAll(".filterTop[datac='c']")) {
  if (el !== ele) {
    this.readWrite += "," + el.getAttribute("dataval");
  }
}