0

我似乎无法访问某些元素的内容,我认为这一定是因为我使用的语法。我正在尝试编写和覆盖 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";

如果有人能指出我正确的方向,我将不胜感激。谢谢。

4

3 回答 3

1

从您的评论来看,可能是在呈现整个页面之前处理您的 Javascript 的情况。

为确保它已渲染,请尝试

window.onload = setText(); 
function setText()
{
    var spanarray = document.getElementsByClassName("myclass");
    spanarray[0].innerHTML = "Replacement text";
}
于 2013-09-10T04:31:28.617 回答
1

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

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

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

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

于 2013-09-10T03:57:01.610 回答
0

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

不工作:

加载文本.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 语法。

于 2013-09-10T16:21:41.373 回答