4 回答

TA贡献1828条经验 获得超4个赞
问题是$(el).find('.ratings-metascore .favorable').text()即使没有找到元素,实际上返回 '' 一个空字符串,所以每次都用空字符串$(el).find('.ratings-metascore > .mixed').text()覆盖的结果。metascore[i]$(el).find('.ratings-metascore .favorable').text()
只是注释掉
if($(el).find('.ratings-metascore .mixed')){
metascore[i] = $(el).find('.ratings-metascore .mixed').text().trim();
}
你会看到你的.favorable结果
更新
由于这两个条件都返回 true,因为find()返回总是一个对象,你必须添加.length > 0到你的 if 条件以使其正常工作
$('.ratings-bar').each((i, el) => {
if($(el).find('.ratings-metascore .favorable').length > 0){
metascore[i] = $(el).find('.ratings-metascore .favorable').text().trim();
}
if($(el).find('.ratings-metascore .mixed').length > 0){
metascore[i] = $(el).find('.ratings-metascore .mixed').text().trim();
}
})
详细解释
假设你有这个 HTML
<div class="a">
<span class="b">hello</span>
<span class="b">world</span>
</div>
然后你运行这个javascript
$(document).find('.a .b');
/**
* this code will return an Object like the following
* {
* "0": span.b(DOM element)
* "1": span.b(DOM element)
* length: 2
* }
*/
$(document).find('.a .b').text();
/**
* this code will return a string like the following
* helloworld
*/
如果你运行这个你试图找到.a .c不存在的元素
$(document).find('.a .c');
/**
* this code will return an Object like the following
* {
* length: 0
* }
*/
$(document).find('.a .c').text();
/**
* this code will return an empty string, since no element was found
*/
因此,在这两种情况下,结果find()始终是一个 Object,它在语句中始终为TRUEIF,并且由于text()始终返回一个字符串(未找到任何元素时为空字符串),这就是为什么您的第二个条件总是覆盖第一个条件,因为它总是真实的。

TA贡献1712条经验 获得超3个赞
从屏幕截图中我可以看出您要查找的元素实际上并不同时具有类ratings-metascore和mixed. 您正在做的是尝试通过父元素属性和子元素属性访问元素,应该这样做:
$('.ratings-bar').each((i, el) => {
if($(el).find('.ratings-metascore > .favorable')){
metascore[i] = $(el).find('.ratings-metascore > .favorable').text().trim();
}
if($(el).find('.ratings-metascore > .mixed')){
metascore[i] = $(el).find('.ratings-metascore > .mixed').text().trim();
}
})
console.log(metascore);

TA贡献1809条经验 获得超8个赞
一个更简单的方法是:
metascore[i] = $(el).find('.ratings-metascore .favorable').text().trim() ||
$(el).find('.ratings-metascore .mixed').text().trim()
请注意,如果元素不存在,这些都将评估为空字符串,这在 javascript 中是错误的:
let foo = "" || "bar"
// foo is now "bar"
添加回答
举报