如何从nodeList获取元素?如何使用byTagname / ByClassName?

时间:2016-01-03 02:08:42

标签: javascript html css dom

看起来我应该在使用之前注意nodeType或者生成Cannot read property '1' of null。出于这个原因,我开始更多地依赖document.querySelector vs getElementbyTagname / getElementsByClassName。如何获取元素并从getElementsBy *

中使用它

现在我使用它,它有效:

var my_el = document.querySelector("some_long_path >div > form > div.field-invalid > textarea");
my_el.value="Hey, I input this into a text area ! :D" ;

如何从getElementsBy *中获取元素? :

my_el = document.getElementsByName("emailform")[0][1]; //ERROR

我需要一个如何通过getElementsBy返回的节点列表的示例?并获得一个元素来使用它。

Here is the form

1 个答案:

答案 0 :(得分:0)

NodeList只不过是一个数组,虽然没有一些便利。您仍然可以使用数组表示法访问单个元素,尽管数组的forEach方法(不是多年来没有检查过)是不可用的,所以你自己动手。



function byId(id,parent){return (parent == undefined ? document : parent).getElementById(id);}
function allByClass(className,parent){return (parent == undefined ? document : parent).getElementsByClassName(className);}
function allByTag(tagName,parent){return (parent == undefined ? document : parent).getElementsByTagName(tagName);}
function forEachNode(nodeList, func){for (var i=0, n=nodeList.length; i<n; i++) func(nodeList[i], i, nodeList); }

window.addEventListener('load', onDocLoaded, false);

function onDocLoaded(evt)
{
  var liElems = allByTag('li');
  
  liElems[0].innerText += " (1st)";
  liElems[1].innerText += " (2nd)";
  liElems[2].innerText += " (3rd)";
}
&#13;
<ul>
  <li>First</li>
  <li>Second</li>
  <li>Third</li>
</ul>
  
&#13;
&#13;
&#13;