2012-08-07 63 views
0

所以,我有一些JavaScript代码,我用Greasemonkey在本地测试。但是,我得到这个错误持续在Firefox的错误控制台:Javascript错误:catChildNotes [y] .setAttribute不是函数

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上运行上传页面并执行以下操作:

  • 从标题中删除“.mp4”
  • 添加默认说明
  • 添加关键字(这等于提示值)
  • 更改类别为“教育”
+0

的机会是'catChildNodes [Y]'是不是你认为它是和物业'setAttribute'被评估为'undefined'。 。那么* catChildNodes [y]'会评估什么?为什么? – 2012-08-07 23:03:05

+0

你是什么意思?你能解释一下好吗? – TheGhost 2012-08-07 23:05:27

+0

它评估在网页的HTML元素中命名proprety。 Name属性被设置为“category”,所以它找到它并得到它的值。它的索引是var x,因为x越来越多,所以如果我有10个视频,x会先是0,然后是9,将我的所有视频类别更改为“Education”。希望我解释得很好! :) – TheGhost 2012-08-07 23:09:00

回答

2

通常,当你得到一个元素的子节点上,您会得到其他element nodestext nodes。前者有setAttribute方法,后者没有(仅仅因为文本节点没有任何属性)。如果您只需要元素子元素并且不需要文本节点,那么您应该使用children property而不是childNodes

。在你的代码中的至少一个以上的错误,这是不是一个比较:

if (catChildNodes[y].value = "27") 

这将分配值27 catChildNodes[y].value。如果你真的想比较,那么你应该使用比较运算符:

if (catChildNodes[y].value == "27")