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 函数的名称getElementsByClassName带有一个s(因为在 HTML 中,与id给定文档中唯一的 s 不同,一个类名可以归属于同一页面的多个元素)。

如果您查看页面的源代码,您实际上可以看到有多个元素标记为 classestemptempF. 您需要根据要提取的内容选择正确的(第一个?第二个?)。

例如:

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

stringWithFormat如果没有格式参数就不用了,那太矫枉过正了,直接用字符串字面量就行了)


PS:为了清楚词汇,请注意元素是用<div class="temp tempF">HTML 编写的,这意味着这是一个div应用两个 CSS 不同类的元素,即temptempF。所以这个元素不是“具有类名的元素temp tempF”,而是“具有两个类名temptempF应用于它的元素”。

提示:要调试您的 javascript,请在​​ Mac 上的 Chrome 或 Safari 等浏览器中打开页面,显示页面检查器并转到控制台选项卡,以便您可以在此处键入 javascript 代码并使用不同的表达式进行一些测试。在您的情况下,您会看到您的函数输入错误,名称中缺少“s”,并且一旦更正,您会看到getElementsByClassName返回多个元素的结果而不仅仅是一个。

于 2012-09-16T13:18:14.233 回答