我做了很多调试,但似乎错误发生在我尝试在ae2Multi()
中使用“this”。
<html><head>
<title>Custom</title>
<style type="text/css"></style>
<script type="text/javascript">
function ae2(elementName) {
var elementObject;
var elementType = elementName.charAt(0);
if(elementType == "#") {
elementObject = document.getElementById(elementName.substr(1));
} else if(elementType == ".") {
elementObject = document.getElementsByClassName(elementName.substr(1));
} else {
elementObject = document.getElementsByTagName(elementName);
}
return elementObject;
}
function ae2Single() {
this.innerHTML = "singleIsWorking";
}
function ae2Multi() {
alert(this);
for (var i = 0; i < this.length; i++) {
this[i].innerHTML = "it really worked!";
}
}
Element.prototype.ae2Single = ae2Single;
Element.prototype.ae2Multi = ae2Multi;
window.onload = function() {
ae2(".container").ae2Multi();
}
</script></head><body><div id="containerMain">hello world!</div><div class="container">hello again!</div><div class="container">hello yet again!</div></body</html>
答案 0 :(得分:2)
当您选择多个元素时,您会获得NodeList
,而不是Element
。所以你需要编辑NodeList
原型:
Element.prototype.ae2Single = ae2Single;
NodeList.prototype.ae2Multi = ae2Multi;
getElementById
是唯一一个返回Element
的人,而其他人则返回NodeList
。
答案 1 :(得分:0)
即使有人威胁要切断你的手,也不要增加原生物体的原型。
编辑:提供这个答案是因为你问“无论如何都要编写1个函数来同时执行这两个”
function ae2(elementName) {
var elementObject;
var elementType = elementName.charAt(0);
if(elementType == "#") {
elementObject = document.getElementById(elementName.substr(1));
} else if(elementType == ".") {
elementObject = document.getElementsByClassName(elementName.substr(1));
} else {
elementObject = document.getElementsByTagName(elementName);
}
if(elementObject.length === 1){
//ae2Single
elementObject.innerHTML = "singleIsWorking";
}
else if(elementObject.length > 1){
//ae2Multi
for (var i = 0; i < elementObject.length; i++) {
elementObject[i].innerHTML = "it really worked!";
}
}
}