我知道,它不受IE支持,但我在网上发现了一个很酷的脚本,有人慷慨地提供免费,但我无法弄清楚为什么它不起作用。我一直盯着这几个小时,请指出我正确的方向!
我的代码:
<script language="javascript" type="text/javascript" src="getbyclass.js"></script>
<script type="text/javascript" language="javascript">
function editToggle(toggle){
if (toggle == "off"){
getElementsByClassName("editp").style.display ="none";
document.getElementById('editToggle').innerHTML="<a href=\"#\" onclick=\"editToggle(\"off\"); return false;\">>Edit Mode: <span style=\"color:red;\">OFF</span></a>";
toggle="on";
}else{
getElementsByClassName("editp").style.display ="inline";
document.getElementById('editToggle').innerHTML="<a href=\"#\" onclick=\"editToggle(\"on\"); return false;\">>Edit Mode: <span style=\"color:green;\">on</span></a>";
toggle="off";
}
}
也:
echo "<span id=\"editToggle\"><a href=\"#\" onclick=\"editToggle(); return false;\">Edit Mode: <span style=\"color:red;\">OFF</span></a></span>";
可以看到getbyclass.js
中的代码here。
在回答下面的答案时,我试过这个:
function editToggle(toggle){
var list = getElementsByClassName("editp");
if (toggle == "off"){
//getElementsByClassName("editp").style.display ="none";
for (index = 0; index < list.length; ++index) {
list[index].style.display ="none";
}
document.getElementById('editToggle').innerHTML="<a href=\"#\" onclick=\"editToggle(\"off\"); return false;\">>Editfalse;\">Edit Mode: <span style=\"color:red;\">OFF</span></a>";
toggle="on";
}else{
//getElementsByClassName("editp").style.display ="inline";
for (index = 0; index < list.length; ++index) {
list[index].style.display ="inline";
}
document.getElementById('editToggle').innerHTML="<a href=\"#\" onclick=\"editToggle(\"on\"); return false;\">>Editfalse;\">Edit Mode: <span style=\"color:green;\">on</span></a>";
toggle="off";
}
}
但它仍无效。
答案 0 :(得分:10)
getElementsByClassName
返回一个集合。您可能需要遍历结果,如下所示:
var elements = document.getElementsByClassName('editp');
for(var i=0; i<elements.length; i++) {
elements[i].style.display='none';
}
应该通过this。
答案 1 :(得分:1)
getElementsByClassName
会返回一个NodeList
(如果它不是内置的,则返回一个数组),但您通过直接引用{{HTMLElement
来使用它它上面的属性:
style
您应该在JavaScript控制台中看到错误,因为您尝试从getElementsByClassName("editp").style.display ="none";
// here ------------------------^
检索属性display
(因为undefined
将是getElementsByClassName("editp").style
)。
如果您想对第一个匹配元素采取行动:
undefined
...或者如果你想对所有人采取行动:
var elm = getElementsByClassName("editp")[0];
if (elm) {
elm.style.display ="none";
}
<强>更新强>:
在某些时候,您编辑了问题并从代码中移除了var index;
var list = getElementsByClassName("editp");
for (index = 0; index < list.length; ++index) {
list[index].style.display ="none";
}
(在全局范围内,在函数上方),并使var toggle = "off"
成为toggle
的参数。但是你没有根据引用的标记将任何内容传递给editToggle
,即使你是这样,如果它是函数参数,将editToggle
设置为函数中的新值也不会产生任何持久影响。 ,因函数返回后没有引用它。
答案 2 :(得分:1)
您创建的标记中可能存在未终止的字符串文字。它似乎还有其他帖子中提到的其他问题。
变化:
"<a href=\"#\">Edit Mode: <span style=\"color:red;>OFF</span></a>";
到
"<a href=\"#\">Edit Mode: <span style=\"color:red;\">OFF</span></a>";
这种情况也存在于您创建的其他标记中。
变化:
"<a href=\"#\">Edit Mode: <span style=\"color:green;>on</span></a>";
到
"<a href=\"#\">Edit Mode: <span style=\"color:green;\">on</span></a>";
答案 3 :(得分:-1)
var toggle="off"
后,您似乎缺少一个半分号。
确保在代码中的某处调用editToggle()
。
我建议您使用内置于浏览器或扩展程序中的检查器。例如,Firefox或Chrome Inspector的Firebug扩展。使用控制台进行调试,看看你的javascript中是否有错误。