[英]Prototype.js get text from an element
我是Protoype.JS的新手,只是稍微測試一下,因為我聽說它很好,但我很快就被卡住了。 就像使用jQuery一樣簡單,將文本放在元素中似乎是世界末日。 我已經嘗試過多種方式的innerHTML,但我唯一能得到的是“未定義”。
alert($$('.mnu_item').innerHTML);
alert($('content').innerHTML);
這些都不起作用。 Content是id為“content”的div,.mnu_item是類“.mnu_item”的錨標記。 我不知道問題是什么,可能是愚蠢的事情但如果有人能指出我正確的方向會很棒!
編輯:我發現不是innerHTML不起作用,但它是類選擇器。 上面代碼中的第二行確實有效。 如果這不是正確的方法,如何在最新的Prototype版本中按類選擇元素?
運行腳本時是否加載了DOM? 如果您沒有在window.onload
運行此代碼或將其放在正文的末尾 ,那么元素在運行時就不存在了。
嘗試將腳本放在結束</body>
標記內。
<body>
<!-- my content -->
<script type="text/javascript">
alert($('content').innerHTML);
</script>
</body>
此外,您的第一行正確選擇,但將返回一個元素數組,因此innerHTML
將是undefined
。
要迭代Array,您可以這樣做:
$$('.mnu_item').each(function(val,i) {
alert(val.innerHTML);
});
或者如果您想得到innerHTML
值的數組,請執行以下操作:
var values = $$('.mnu_item').map(function(val,i) {
return val.innerHTML;
});
在運行這些測試之前,請確保已加載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
var text = $$('label [for =“display_on_amazon”]')。first()。textContent;
上面的代碼對我有用。
關於,$$('。mnu_item')。innerHTML
當您嘗試使用類選擇器進行提取時,prototype返回多個元素的數組,通過使用[0]或first()方法系統將指向該數組中的第一個元素,之后您可以使用innerHtml(以獲取內部的html) element)或textContent(獲取該元素的文本內容,本機javascript方法)
$('content')。innerHTML應該有用。 檢查您的HTML,確保ID是唯一的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.