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"
添加回答
舉報