如何编码NodeList.getElementsByTagName

我试图做以下

选择 | 换行 | 行号
  1. document.getElementsByTagName("sup").getElementsByTagName("a");

目前我有这个,因为我需要以某种方式返回组合结果Nodelist

选择 | 换行 | 行号
  1. // can’t prototype into NodeList because of Firefox
  2. if (!Object.getElementsByTagName && Object.length)
  3. {
  4.     Object.prototype.getElementsByTagName = function(name)
  5.     {
  6.         // the only idea I got
  7.         var div = document.createElement("div");
  8.         for (var i=0, len=this.length >>> 0; i<len; i++)
  9.         {
  10.             if (i in this)
  11.             {
  12.                  div.appendChild(this[i]);  // line 92
  13.             }
  14.         }
  15.         return div.getElementsByTagName(name);    
  16.     }
  17. }

但是,在运行代码(FF 3.5.2)时,我会得到以下异常: 在此之前有一些工作. 通过检查创建的DIV I发现已提到的节点已被复制 有人可以在这方面帮助我吗? HTML样本代码

选择 | 换行 | 行号
  1. <h4>15<sup>th</sup> – 24<sup>th</sup> Hesinde<sup><a href="#n1-3">3</a></sup></h4>
# 回答1

我可以防止例外

选择 | 换行 | 行号
  1. div.appendChild(this[i].cloneNode(true));

但这不是我以后需要的nodelist

# 回答2

嗨,多米里奇, 您想将锚点放在其中吗? 我尝试了这个...

选择 | 换行 | 行号
  1. function callJS(){
  2.         var subObj = document.getElementsByTagName('sup');
  3.         for(i=0;i<subObj.length;i++)
  4.         {
  5.             try
  6.             {
  7.                 var aObj = subObj[i].getElementsByTagName('a');
  8.                 if(aObj.length>0)
  9.                 {
  10.                     alert("I got the Object at the Index "+i);
  11.                 }
  12.             }
  13.             catch(e)
  14.             {}
  15.         }
  16.     }

谢谢并恭祝安康 Ramanan Kalirajan

# 回答3

@ramanankalirajan 是的,我想得到那些锚点(这不是问题),但是我需要它们返回 一个列表 (这是这里的问题). 警报在这里没有用:( 也许在返回数组时也有效(尽管那不一样)
# 回答4

抱歉,但是"一个列表"和一个数组之间有什么区别?
# 回答5

Ramanankalirajan的代码没有返回值(又称一个列表) getElementsBytagName()通常返回节点符. 如果我原型getElementsbythame bytagname中的nodelist界面,我也喜欢它返回节点符(因为那是您所期望的). 如果一切都失败了,它也可以返回数组
# 回答6

可以 名为nodemap 根本可以帮助您?
# 回答7

我认为节日主义者是不变的(请参阅 文章... )...
# 回答8

那也是我得到的印象
# 回答9

我尝试了...但它只是无法使用. 我认为您不能一起加入结节型. 我能做的最好的就是创建一个节点

选择 | 换行 | 行号
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <input type="text" id="text1" name="text1" />
  6. <input type="text" id="text2" name="text2" />
  7. <input type="text" id="text3" name="text3" />
  8.  
  9. <select id="select1" name="select1"> 
  10. <option>1</option>
  11. <option>2</option>
  12. </select>
  13. <select id="select2" name="select2">
  14. <option>1</option>
  15. <option>2</option>
  16. </select>
  17.  
  18. <script type="text/javascript">
  19.  
  20. var inputs = document.getElementsByTagName('input');
  21. var selects = document.getElementsByTagName('select');
  22.  
  23.  
  24. var all = new Array(inputs.length + selects.length);
  25. var index = 0;
  26. for (i = 0; i < inputs.length; i++)
  27.     all[index++] = inputs[i];
  28. for (i = 0; i < selects.length; i++)
  29.     all[index++] = selects[i];
  30.  
  31.  
  32. </script>
  33.  
  34. </body>
  35. </html>

抱歉...也许其他人知道更多:) 我是JavaScript的新手.

# 回答10

@frinavale 为了成为新手,你很好:)
# 回答11

哈哈谢谢宿舍:) 有时我认为JavaScript会爆炸. 我认为,这些天以上的问题中有一半与JavaScript有关(以及Microsoft认为Ajax应该是什么的混乱想法).
# 回答12

@frinavale 这一点是,如果每个人(我的意思是每个人)都坚持这些规格,那么生活就会容易得多.
# 回答13

@Dormilich 有时,它破坏了进步技术的规格. 因此,即使我希望MS遵守规则(因为这会使我的生活变得更轻松),但我认为我们将通过对所有人执行规则来恢复很多东西... 除非我们尝试使用好事,否则我们还应该如何知道是否更改规格(为了推进技术)?
# 回答14

@frinavale 这是开发周期的一部分
# 回答15

好的,既然我们发现我们可以自己创建结节式主义者,我将回到将相关元素放在常见(新)父母中的最初想法,并使用它来适用 getElementsbytagname() . 我基本上需要某种指示,因为原始计划不做E xpected,我可以使用克隆的节点并在文档和父之间移动节点非常不便. 有什么想法在这个方向上吗?

标签: Javascript

添加新评论