我似乎无法访问某些元素的内容,我认为必须是因为我正在使用的语法。我正在尝试编写并覆盖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";
如果有人能指出我正确的方向,我真的很感激。感谢。
答案 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语法。