我是Protoype.JS的新手,只是稍微测试了一下,因为我听说它很好,但我很快就被卡住了。 就像使用jQuery一样简单,将文本放在元素中似乎是世界末日。我已经尝试过多种方式的innerHTML,但我唯一能得到的是“未定义”。
alert($$('.mnu_item').innerHTML);
alert($('content').innerHTML);
这些都不起作用。 Content是id为“content”的div,.mnu_item是类“.mnu_item”的锚标记。 我不知道问题是什么,可能是一些愚蠢的事情,但如果有人能指出我正确的方向会很棒!
编辑:我发现不是innerHTML不起作用,但它是类选择器。上面代码中的第二行确实有效。如果这不是正确的方法,如何在最新的Prototype版本中按类选择元素?答案 0 :(得分:7)
运行脚本时是否加载了DOM?如果您没有在window.onload
中运行此代码或将其放在正文的 end ,那么元素在运行时就不存在。
尝试将您的脚本放在结束</body>
标记内。
<body>
<!-- my content -->
<script type="text/javascript">
alert($('content').innerHTML);
</script>
</body>
此外,您的第一行正确选择,但会返回一个元素数组,因此innerHTML
将为undefined
。
要迭代数组,您可以这样做:
$$('.mnu_item').each(function(val,i) {
alert(val.innerHTML);
});
或者如果您希望得到innerHTML
值的数组,请执行以下操作:
var values = $$('.mnu_item').map(function(val,i) {
return val.innerHTML;
});
答案 1 :(得分:1)
在运行这些测试之前确保已加载DOM:
$(document).on('dom:loaded', function () {
/* code to execute after dom has loaded */
})
第一行代码 $$('。mne_item')不起作用,因为$$返回一个包含与css规则匹配的所有元素的数组。所以$$('。mne_item')给出了一个包含 mne_item 类的所有dom元素的数组。你可以使用第一个方法询问第一个,或者迭代所有这样的项目:
$$('.mne_item').each(function(elem) {
// elem is the li elements extended by all Element methods of prototype
});
如果你在jQuery中使用 $ ,它实际上使用了类似的模式,但隐藏了每个构造。它只是将链式方法应用于所有元素或仅应用于第一个元素。
第二行代码 $('content')。innerHTML 应该有效。 $ 是 document.getElementById 的快捷方式,因此它应该为您提供DOM节点。这不起作用的原因是没有节点,其中id = content,可能是因为dom尚未加载。
有关原型方法的更多信息,请查看api:http://api.prototypejs.org/
同时检查默认的DOM方法:http://quirksmode.org/dom/w3c_core.html
答案 2 :(得分:0)
$('content')。innerHTML应该有用。检查您的HTML,确保ID是唯一的。
答案 3 :(得分:0)
var text = $$('label [for =“display_on_amazon”]')。first()。textContent;
上面的代码对我有用。
关于,$$('。mnu_item')。innerHTML
当您尝试使用类选择器获取时,prototype返回多个元素的数组,通过使用[0]或first()方法系统将指向该数组中的第一个元素,之后您可以使用innerHtml(获取)元素内部的html)或textContent(获取该元素的文本内容,本机javascript方法)