在HTML A标签中,通过href属性直接调用JavaScript函数无法正确传递this对象,因为此时上下文并非当前元素。相比之下,使用onclick事件处理器时,浏览器会自动将this封装在匿名函数中,使其正确指向触发事件的A标签元素。本文详细解析了这一机制差异,并提供获取元素innerHTML的正确代码示例。
href与onclick传递this的差异
在博客后台管理中,有时需要为分类添加链接地址,但直接添加onclick事件较为不便。若尝试通过href属性传递当前对象给函数,例如写成"javascript:shoControlSidebar(this)",会发现该方式不可行。虽然传递过去的参数是一个对象,但无法获取预期信息,如innerText,因为此时的this并未指向所在的A标签元素。
这体现了<a href="javascript:shoControlSidebar(this)">与<a href="javascript:void(0)" onclick="shoControlSidebar(this)">两种写法的关键区别。
当使用onclick="shoControlSidebar(this)"时,JavaScript解释器会将其包装为一个匿名函数执行。
}
onclick的匿名函数包装机制
具体实现逻辑如下:
a.onclick = function anonymous() {
{
shoControlSidebar(this);
} 在此匿名函数内部,this明确指向触发该事件的a元素对象。而若使用href方式,由于它被视为一个URL地址,this便失去了正确的指向目标。
获取元素内容的正确代码示例
示例代码如下:
<a href="javascript:void(0);" onclick="test(this);">A标签测试</a> 若需获取A标签内部的HTML内容,请注意以下代码实现:
目标:获取A标签中的innerHTML
如果直接在href中写"test(this);",不仅无法获取值,还会导致程序退出,因为href指向无效。 正确的函数定义示例如下:
function test(obj) {
alert(obj);
// 原生JavaScript方式
alert(obj.innerHTML);
// jQuery方式
alert($(obj).html());
}