This question already has answers here:
What do querySelectorAll and getElementsBy* methods return?
                                
                                    (9个答案)
                                
                        
                                5年前关闭。
            
                    
我仍然使用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显示页面。

最佳答案

javascript函数的名称为getElementsByClassName和s(因为在HTML中,与id在给定文档中是唯一的不同,类名称可以归因于同一页面的多个元素)。

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

例如:

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


(如果您没有任何格式参数,则无需使用stringWithFormat,这只是个过大的选择,只需直接使用字符串文字即可)



PS:只是为了清楚了解词汇表,请注意,该元素在HTML中写为<div class="temp tempF">的事实意味着这是一个div元素,它应用了两个CSS不同的类,即temptempF。因此,此元素不是“具有类名称temp tempF的元素”,而是“应用于两个具有类名称temptempF的元素”。

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

07-24 21:21