2011-01-24 27 views
6

私はProtoype.JSを使い慣れていて、それが良いと聞いて少しだけテストしていますが、非常に素早く立ち往生しています。 これはjQueryと同じように簡単ですが、要素内にテキストを取得するのは世界の終わりのようです。私はinnerHTMLを複数の方法で試しましたが、私が得ることのできる唯一のものは「未定義」です。Prototype.js要素からテキストを取得

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

これらの作業はありません。 コンテンツはidが "content"のdivで、.mnu_itemは ".mnu_item"クラスのアンカータグです。 問題は何か、おそらく何かばかげているわけではありませんが、誰かが私を正しい方向に向けることができれば素晴らしいことでしょう!

EDIT:これは動作しないinnerHTMLではなく、クラスセレクタです。上のコードの2行目が動作します。これが正しい方法でない場合、どのように最新のPrototypeバージョンでそのクラスによって要素を選択できますか?

+0

を使用して、$( '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')は、クラスmne_itemを持つすべてのdom要素の配列を返します。あなたは最初メソッドを使用して、最初のものを頼むか、このようなすべてのアイテムを反復処理することができます

$$('.mne_item').each(function(elem) { 
    // elem is the li elements extended by all Element methods of prototype 
}); 

あなたはjQueryので$を使用している場合、それは実際に同様のパターンを使用していますが、各構築物を隠します。これは、チェーンされたメソッドをすべての要素または最初の要素に適用するだけです。

コードの第2行$( 'content')。innerHTMLは動作するはずです。 $document.getElementByIdのショートカットですので、DOMノードを戻してください。これがうまくいかない理由は、id = contentのノードが存在しないことです。おそらくdomがまだロードされていないためです。APIのプロトタイプを見ての方法についての詳細情報については

http://quirksmode.org/dom/w3c_core.html

+0

$(document).on( 'dom:loaded'、function(){...});を使用して違いがありますか。 document.observe( 'dom:loaded'、function(){...})とは対照的に;私は推測していない... domを見たことがない:on()の前にロードされている:/ – VBAssassin

+1

彼らはセレクタ引数を扱うことができる新しいメソッドです(API参照) –

0

するvarテキスト= $$( '[= "display_on_amazon" のための]ラベル':http://api.prototypejs.org/

はまた、デフォルトのDOMメソッドをチェックします).first()。textContent;

上記のコードは私のために働いた。

に関して、$$( 'mnu_item')。innerHTMLの

、クラスセレクタとフェッチしようとしている場合、プロトタイプ[0]または第()メソッドシステムがポイントします使用して、複数elmentsの配列を返しますその配列の最初の要素で、その後、innerHtml(要素内でhtmlを取得する)またはtextContent(その要素のテキストコンテンツを取得する、ネイティブJavaScriptメソッド)

関連する問題