2011-01-24 77 views
6

我是Protoype.JS的新手,只是测试了一下,因为我听说它很好,但我很快就卡住了。 就像jQuery一样简单,它似乎是世界末日获得元素中的文本。我用多种方式尝试了innerHTML,但我能得到的唯一东西是“未定义”。Prototype.js从元素中获取文本

alert($$('.mnu_item').innerHTML); 
alert($('content').innerHTML); 

这些都不起作用。 内容是一个ID为“content”的div,而.mnu_item是类别为“.mnu_item”的锚标签。 我不明白问题所在,可能是一些愚蠢的事情,但如果有人能指引我走向正确的方向,那将会很棒!

编辑:我发现它不是innerHTML不工作,但它是类选择器。上面代码中的第二行确实起作用。如果这不是正确的方式,我怎样才能在最新的Prototype版本中通过它的类来选择一个元素?

+0

使用jQuery,只需调用$('content “)的.html();检索HTML –

+2

教育韵:没有HTML很难说。 – acme

回答

6

运行脚本时是否加载了DOM?如果您没有在window.onload中运行此代码或将其放置在主体的末尾上,那么这些元素在运行时不存在。

尝试将您的脚本放在关闭</body>标记内。

<body> 
    <!-- my content --> 

    <script type="text/javascript"> 
     alert($('content').innerHTML); 
    </script> 
</body> 

此外,您的第一线正确选择,但将返回元素的数组,所以innerHTMLundefined

要遍历数组,你可以这样做:

$$('.mnu_item').each(function(val,i) { 
    alert(val.innerHTML); 
}); 

,或者如果你想用innerHTML值数组来结束,这样做:

var values = $$('.mnu_item').map(function(val,i) { 
    return val.innerHTML; 
}); 
+0

嘿谢谢!我不知道它正在返回一个数组,正如我所说的,这是一个非常愚蠢的问题。 – hhoud

+0

@ hh354:不客气。 – user113716

0

$('content')。innerHTML应该工作。检查你的HTML,确保ID是唯一的。

1

确保DOM在运行这些测试之前加载:

$(document).on('dom:loaded', function() { 
    /* code to execute after dom has loaded */ 
}) 

代码的第一行$$('。mne_item')不起作用,因为$$会返回匹配css规则的所有元素的数组。所以$$('。mne_item')给出了所有dom元素的数组,其类别为mne_item。您可以通过使用第一方法问的第一个或遍历所有类似的项目:

$$('.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

+0

使用$(document).on('dom:loaded',function(){...})是否有区别?而不是document.observe('dom:loaded',function(){...});我假设没有......从未见过dom:加载在on()之前:/ – VBAssassin

+1

它们的行为相同,on是一个新的方法,也可以处理选择器参数(请参阅API) –

0

变种文字= $$( '标签[为= “display_on_amazon”]' )。首先()的textContent。

上面的代码适用于我。

关于,$$( 'mnu_item')。innerHTML的

当你试图与类选择来获取,原型返回多个elments的阵列,通过使用[0]或第一()方法的系统将指向在该数组中的第一个元素之后,可以使用innerHtml(获取元素内的html)或textContent(获取该元素的文本内容,原生javascript方法)