2012-09-16 3 views
1

Je travaillais toujours avec getElementsByID et c'était tout dieu. Mais maintenant je veux le faire avec ByClassName, mais ça ne marche pas.iPhone UIWebView getElementsByClassName

Je veux avoir la température de cette page: http://www.weatherman.com/us/ny/new-york.html le nom de classe est: temp tempF

mais ce code ne fonctionne pas: tempString = [deg stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementByClassName('temp tempF').innerText;"]]; degrés est ma WebView montrant la page.

Répondre

6

le nom de la fonction javascript est getElementsByClassName avec un s (car en HTML, contrairement à id s qui sont uniques dans un document donné, un nom de classe peut être attribuée à plusieurs éléments de la même page). Si vous regardez le code source de votre page, vous pouvez voir qu'il y a plusieurs éléments étiquetés avec les classes temp et tempF. Vous devez sélectionner le bon (premier? Deuxième?) En fonction de celui que vous voulez extraire.

Par exemple:

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

(Pas besoin d'utiliser stringWithFormat si vous n'avez pas un paramètre de format, qui est juste surpuissant, il suffit d'utiliser le littéral directement chaîne)


PS: Juste pour être clair sur le vocabulaire, notez que le fait que l'élément est écrit <div class="temp tempF"> dans le HTML signifie que c'est un élément div qui s'applique deux classes distinctes CSS, à savoir temp et tempF. Donc, cet élément n'est pas "un élément avec le nom de classe temp tempF" mais plutôt "un élément avec deux noms de classe temp et tempF appliqué".

Astuce: Pour déboguer votre javascript, ouvrez la page dans un navigateur comme Chrome ou Safari sur votre Mac, montrer l'inspecteur de la page et cliquez sur l'onglet Console de sorte que vous pouvez taper le code javascript ici et tester un peu avec des expressions différentes. Dans votre cas, vous auriez vu que votre fonction a été mal typée, manquant le "s" dans le nom, et une fois corrigée, vous auriez vu que le résultat de getElementsByClassName renvoie plusieurs éléments et pas seulement un.

+0

[0] simple mais génial! –