1

私はまだ getElementsByID を使用していましたが、それはすべて神でした。しかし、今はByClassNameでやりたいのですが、うまくいきません。

このページの温度を取得したい: http://www.weatherman.com/us/ny/new-york.html クラス名: temp tempF

しかし、このコードは機能しません: tempString = [deg stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementByClassName('temp tempF').innerText;"]]; deg は、ページを表示する WebView です。

4

1 に答える 1

6

JavaScript 関数の名前にはsgetElementsByClassNameが付いています (HTML では、特定のドキュメント内で一意の s とは異なり、クラス名は同じページの複数の要素に関連付けることができるため)。id

ページのソース コードを見ると、classestempおよびtempF. 抽出するものに応じて、正しいもの (最初? 2番目?) を選択する必要があります。

例えば:

tempString = [deg stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('temp tempF')[0].innerText;"];

stringWithFormatフォーマットパラメータがない場合は使用する必要はありません。これはやり過ぎです。文字列リテラルを直接使用するだけです)


PS: 語彙について明確にするために、要素が<div class="temp tempF">HTML で記述されているという事実は、これが と という 2 つの CSS の異なるクラスを適用する要素divであることを意味することに注意してください。したがって、この要素は「クラス名を持つ要素」ではなく、「2 つのクラス名を持ち、それに適用される要素」です。temptempFtemp tempFtemptempF

ヒント: JavaScript をデバッグするには、Mac の Chrome や Safari などのブラウザーでページを開き、ページ インスペクターを表示して [コンソール] タブに移動し、ここに JavaScript コードを入力して、さまざまな式で少しテストします。あなたの場合、関数のタイプが間違っていて、名前に「s」がありませんでした。修正すると、結果がgetElementsByClassName1 つだけでなく複数の要素を返すことがわかります。

于 2012-09-16T13:18:14.233 に答える