如何从节点列表中访问HTML元素的内容?

时间:2013-09-10 03:48:36

标签: javascript html

我似乎无法访问某些元素的内容,我认为必须是因为我正在使用的语法。我正在尝试编写并覆盖getElementsByClassName列表的成员。我知道它是一个nodeList而不是一个数组,但我仍然无法弄明白。以下是我的尝试:

HTML:

<span class="myclass">Text</span>
<span class="myclass">Text2</span>

JS:

var spanarray = document.getElementsByClassName("myclass");
//I've tried all of the following (for the record, I thought either 2 or 5 would work)
spanarray[0] = "Replacement text";
spanarray[0].innerHTML = "Replacement text";
spanarray.item(0) = "Replacement text";
spanarray.item(0).innerHTML = "Replacement text";
spanarray.item(0).nodeValue = "Replacement text";

如果有人能指出我正确的方向,我真的很感激。感谢。

3 个答案:

答案 0 :(得分:1)

以下(您的第二个例子)有效:

var spanarray = document.getElementsByClassName("myclass");
spanarray[0].innerHTML = "ABC"

这是一个jsfiddle并在您的浏览器中尝试:http://jsfiddle.net/N4fjX/

如果您有其他问题,请发布您网页的其余部分。

答案 1 :(得分:1)

根据您的评论,可能会出现在整个页面呈现之前处理Javascript的情况。

要确保已渲染,请尝试

window.onload = setText(); 
function setText()
{
    var spanarray = document.getElementsByClassName("myclass");
    spanarray[0].innerHTML = "Replacement text";
}

答案 2 :(得分:0)

事实证明我的问题是通过AJAX从外部JS函数调用PHP,所以虽然PHP生成的内容出现在浏览器中,但这些元素在“查看源代码”下实际上并不可见,因此无法访问由JS。我应该在原帖中提到PHP部分,但我认为这不重要。

不工作:

loadText.php

<?php
echo "<span class='myclass'>This text should be replaced</span>"
?>

HTML

<div id='somediv'>
  <script type="text/javascript">loadText();</script>
</div>
...
<script type="text/javascript">
  var spanarray = document.getElementByClassName("myclass"); //doesn't work in IE6-9
  spanarray[0].innerHTML = "Replacement Text";
</script>

JS

function loadText(){
  var somediv = document.getElementById("somediv");
  var xmlhttp;
  if (window.XMLHttpRequest)
  {// for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else
  {// for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange = function()
  {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      somediv.innerHTML = xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","loadText.php",true);
  xmlhttp.send();
}

解决方案:

不要使用AJAX跳过额外的循环,而是直接在HTML页面上执行PHP。如果AJAX是绝对必要的,那么我不确定解决方案是什么。 Plymouth223和Jonathan Chow提供了正确的JS语法。