Javascript 在实现ECMAScript 5 InsertaCentHTML()函数时,用户定义的函数不是函数错误
我正在做的是使用纯javascript生成一个post导航。但它在关闭标签之前显示,标签不是一个函数 在下面的工具功能中,它应该是一个函数,因为我在将标记作为函数关闭之前编写了代码。 在代码段中,它可以生成ul列表,但如果您通过web inspector查看,仍然可以找到:Javascript 在实现ECMAScript 5 InsertaCentHTML()函数时,用户定义的函数不是函数错误,javascript,ecmascript-5,Javascript,Ecmascript 5,我正在做的是使用纯javascript生成一个post导航。但它在关闭标签之前显示,标签不是一个函数 在下面的工具功能中,它应该是一个函数,因为我在将标记作为函数关闭之前编写了代码。 在代码段中,它可以生成ul列表,但如果您通过web inspector查看,仍然可以找到: **Uncaught TypeError: greatApp.tools.insertHTMLString.beforeClosingTag is not a function** 除此之外,在我当地的环境中,相同的代码,
**Uncaught TypeError: greatApp.tools.insertHTMLString.beforeClosingTag is not a function**
除此之外,在我当地的环境中,相同的代码,但它甚至不能显示ul列表,我不知道为什么。谢谢
//全局工具函数(insertHTMLString.beforeClosingTag)
var greatApp=greatApp | |{};
(功能(){
greatApp.tools={
insertHTMLString:函数(){
/*****
如果元素有一个本机insertAdjacentHTML:在四个具有更合理名称的html插入函数中使用它
*****/
if(document.createElement('div').insertAdjacentHTML){
返回{
beforeOpeningTag:函数(元素,htmlString){
元素insertAdjacentHTML('beforebeagin',htmlString);
},
afterOpeningTag:函数(元素,htmlString){
元素insertAdjacentHTML('afterbegin',htmlString);
},
beforeClosingTag:函数(元素,htmlString){
元素insertAdjacentHTML('beforeend',htmlString);
},
afterClosingTag:函数(元素,htmlString){
元素。insertAdjacentHTML('afterend',htmlString);
}
}
}//如果结束
/********
否则,我们就没有本机insertAdjacentHTML:实现相同的四个插入函数,然后使用它们来定义insertAdjacentHTML
******/
函数片段(htmlString){
var ele=document.createElement('div');
var frag=document.createDocumentFragment();
ele.innerHTML=htmlString;
//将所有节点从ele移动到frag
while(ele.firstChild)
第二个子女(第一个子女除外);
返回碎片;
}
var insertHTMLString={
beforeOpeningTag:函数(元素,htmlString){
element.parentNode.insertBefore(片段(htmlString),元素);
},
afterOpeningTag:函数(元素,htmlString){
element.parentNode.insertBefore(片段(htmlString),element.firstChild);
},
beforeClosingTag:函数(元素,htmlString){
元素.parentNode.appendChild(片段(htmlString));
},
afterClosingTag:函数(元素,htmlString){
element.parentNode.insertBefore(片段(htmlString),element.nextSibling);
}
};
/**
现在基于上述函数实现insertAdjacentHMTL
**/
Element.prototype.insertAdjacentHMTL=函数(pos,htmlString){
开关(位置toLowerCase()){
案例“beforebeaging”:返回insertHTMLString.beforeOpeningTag(此,htmlString);
案例“afterbeging”:返回insertHTMLString.afterOpeningTag(此,htmlString);
case“beforeend”:返回insertHTMLString.beforeClosingTag(this,htmlString);
案例“afterend”:返回insertHTMLString.beforeClosingTag(此,htmlString);
}
};
回位插入器;
},
}}());
//邮政js
(功能(){
var titles=document.queryselectoral('.sideNav h3');
var sideList=document.getElementsByClassName('sideList')[0];
var ul=document.queryselectoral('.sideList ul')[0];
对于(变量i=0;i';
(Element.prototype.insertAjacentHTML)?ul.insertAjacentHTML('beforeend',li):greatApp.tools.insertHTMLString.beforeClosingTag(ul,li);
}
}());代码>
#更新
#家
#论坛
页面导航
这是因为,插入tmlstring
是一个函数而不是对象。您可以创建一个对象,如:
var innerHTMLObj = new greatApp.tools.insertHTMLString();
(Element.prototype.insertAjacentHTML) ?
ul.insertAdjacentHTML('beforeend', li):
innerHTMLObj.beforeClosingTag(ul, li);
当然,你可以用iLife
替换它
对象实现
//全局工具函数(insertHTMLString.beforeClosingTag)
var greatApp=greatApp | |{};
(功能(){
greatApp.tools={
insertHTMLString:函数(){
/*****
如果元素有一个本机insertAdjacentHTML:在四个具有更合理名称的html插入函数中使用它
*****/
if(document.createElement('div').insertAdjacentHTML){
返回{
beforeOpeningTag:函数(元素,htmlString){
元素insertAdjacentHTML('beforebeagin',htmlString);
},
afterOpeningTag:函数(元素,htmlString){
元素insertAdjacentHTML('afterbegin',htmlString);
},
beforeClosingTag:函数(元素,htmlString){
元素insertAdjacentHTML('beforeend',htmlString);
},
afterClosingTag:函数(元素,htmlString){
元素。insertAdjacentHTML('afterend',htmlString);
}
}
}//如果结束,则结束
/********
否则,我们没有本机insertAdjacentHTML:实现相同的四个插入函数,然后使用它们来定义