我可以使用jQuery基于另一个属性的值设置属性吗?

时间:2017-10-23 19:31:40

标签: javascript jquery

这就是我现在所拥有的,它不起作用:

<script>
jQuery(function($){
  $(document).ready(function(){
    $("a").attr('onclick', 'return goog_report_conversion(' + this.attr('href') + ')');
  });
});
</script>

我是否错误地使用了'this'关键字?

1 个答案:

答案 0 :(得分:4)

如果您不打算在元素中分配onclick内联,我认为没有理由不使用标准事件处理程序。您可以详细了解这些好处here

我建议:

$("a").click(function() {
    var href = $(this).attr("href");
    return goog_report_conversion(href);
});

此外,您的前两行代码执行相同的任务,因此您不需要两者。 (More info here

jQuery(function($){ ... });

//  OR

$(document).ready(function() { ... });

如果你想知道为什么你的工作不起作用:

attr()没有自己的this参数。

(向上追踪,您使用它的上下文实际上会引用document,因为范围由$(document).ready( ... )定义

如果 以这种方式执行,您可能需要修改goog_report_conversion()函数以接受所点击元素的参数,而不是href 。您的this将包含在字符串中,而不是连接在一起。使用传递的元素,您将获取href,类似于上面示例中的操作。

function goog_report_conversion(clicked_element) {
    var href = $(clicked_element).attr("href");
    //do something with href
});

$("a").attr("onclick", "return goog_report_conversion(this);");

话虽如此,请不要这样做。