试图从 js this 关键字中提取字符串

trying to extract a string from a js this keyword

我正在尝试在加载 link 之前单击 link 后执行 javascript,使用此代码:

$('body').on("click", 'a', function (evt) {
            evt.preventDefault();
            console.log(this);
            $('.content').addClass('hide');
            if (this.search("AV") > 0) {
                $('#AVheader').addClass('fullwidth');
            }
            setTimeout(function () {
                window.open(this, "_self");
            }, 500);
        });

我的错误是:

this.search 不是函数并且

window.open(this, "_self"); 无效

想把问题提出来,因为我找不到简单的解释,我可能会花半天的时间来弄清楚..

超时函数内的

this 不会引用您的锚元素,而是引用全局 window 对象。您需要保存对该元素的引用,然后在超时回调中使用该引用

$('body').on("click", 'a', function (evt) {
  evt.preventDefault();
  //save the "this" reference
  var that = this;
  $('.content').addClass('hide');
  if (this.search.search("AV") > 0) {
    $('#AVheader').addClass('fullwidth');
  }
  setTimeout(function () {
    window.open(that.search, "_self");
  }, 500);
});

此外,锚元素上的 .search 属性 不是函数,它是字符串,您必须根据自己的情况执行 this.search.search("AV")this.href.search("AV")实际上试图搜索

当您在事件处理程序中时 this 指向被单击的 link。元素没有 search 方法。可能您正在尝试在 link 的某处搜索字符串,也许是内容。

    $('body').on("click", 'a', function (evt) {
        evt.preventDefault();
        console.log(this);
        $('.content').addClass('hide');
        if (this.innerHTML.search("AV") > 0) {
            $('#AVheader').addClass('fullwidth');
        }
        setTimeout(function () {
            window.open(this.href, "_self");
        }.bind(this), 500);
    });