插件与javascript函数冲突的原因
the reason why Conflict between plugin and javascript function occured
前几天为了赶快写代码,在下面加上了不好的代码。
<td class="note_box_con" onclick="getElementsByTagName('a')[0].click();">
之后,当我尝试使用 Javascript 编写的文本编辑器插件时,我发现
文本编辑器插件和DOM的功能相互冲突
现在我知道问题出在哪里并解决了。但是我不明白 getElementsByTagName('a')[0].click(); 有什么样的风险。
在我看来,该代码只是 addEventlistener function().....
what kind of risk onclick="getElementsByTagName('a')[0].click();" has?
以我的理解,这样做是一种不好的做法。我宁愿建议你使用类名或 ID 来获取。
如果您使用的某些资源会向您的页面添加锚标记,这会破坏您的逻辑。
模拟如下:
var count = 0;
function addAnchor(){
var div = document.getElementById("content");
var str = "<a href='#'>" + count++ + "</a>";
div.innerHTML = str + div.innerHTML;
}
document.getElementsByTagName("a")[0].addEventListener("click", function(){
console.log(this.innerHTML);
return false;
})
<div id="content">
<a href="#">Test</a>
</div>
<button onclick="addAnchor()">Add Link</button>
<a onclick="document.getElementsByTagName('a')[0].click()"> test </a>
此外,如果 DOM 结构发生变化,您的代码将无法正常运行。最好使用能够唯一标识元素的正确选择器。
前几天为了赶快写代码,在下面加上了不好的代码。
<td class="note_box_con" onclick="getElementsByTagName('a')[0].click();">
之后,当我尝试使用 Javascript 编写的文本编辑器插件时,我发现
文本编辑器插件和DOM的功能相互冲突
现在我知道问题出在哪里并解决了。但是我不明白 getElementsByTagName('a')[0].click(); 有什么样的风险。
在我看来,该代码只是 addEventlistener function().....
what kind of risk onclick="getElementsByTagName('a')[0].click();" has?
以我的理解,这样做是一种不好的做法。我宁愿建议你使用类名或 ID 来获取。
如果您使用的某些资源会向您的页面添加锚标记,这会破坏您的逻辑。
模拟如下:
var count = 0;
function addAnchor(){
var div = document.getElementById("content");
var str = "<a href='#'>" + count++ + "</a>";
div.innerHTML = str + div.innerHTML;
}
document.getElementsByTagName("a")[0].addEventListener("click", function(){
console.log(this.innerHTML);
return false;
})
<div id="content">
<a href="#">Test</a>
</div>
<button onclick="addAnchor()">Add Link</button>
<a onclick="document.getElementsByTagName('a')[0].click()"> test </a>
此外,如果 DOM 结构发生变化,您的代码将无法正常运行。最好使用能够唯一标识元素的正确选择器。