2011-01-24 37 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方法)