所以,我有一些JavaScript代码,我在本地用Greasemonkey测试。但是我在Firefox错误控制台中遇到了这个持久性错误:
catChildNotes [y] .setAttribute不是函数
代码:
var i = prompt("How many videos have you got?", "");
function remove_mp4()
{
titleElems=document.getElementsByName("title");
for(i=0; i<titleElems.length; i++)
{
titleInner=titleElems[i].innerHTML;
titleElems[i].innerHTML=titleInner.replace(titleInner.match(".mp4"), "");
}
}
for (var x = 0; x < i; i++)
{
document.getElementsByName("description")[x].value = "Visit me on my web-site :\
\
http://www.sample.com/";
document.getElementsByName("keywords")[x].value = prompt("Enter keywords : ","");
catChildNodes=document.getElementsByName("category")[x].childNodes;
catChildNodes[x + 1].removeAttribute("selected");
for(y=0; y<catChildNodes.length; y++)
{
if(catChildNodes[y].value="27")
{
catChildNodes[y].setAttribute("selected","");
}
}
}
remove_mp4();
此脚本应在Youtube上传页面上运行,并执行以下操作:
答案 0 :(得分:2)
通常,当您获得元素的子节点时,您将获得其他element nodes和text nodes。前者有setAttribute
方法,后者没有(因为文本节点没有任何属性)。如果您只需要元素子元素而不需要文本节点,那么您应该使用children
property而不是childNodes
。
您的代码中至少还有一个错误,这不是比较:
if (catChildNodes[y].value = "27")
这将将值<27>分配给catChildNodes[y].value
。如果你真的想比较那么你应该使用比较运算符:
if (catChildNodes[y].value == "27")