2017-06-26 35 views
1

我想我有一個範圍問題。這是我的HTML(我知道是 「壞」 的HTML,但它作爲是從其他來源):每個函數內部的Javascript jQuery數組函數

<table> 
    <tr> 
     <td> 
      <div><b>blablabla <span>some text</span></b></div> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <div><b><span>this is another text</span></b></div> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <div><b>blablabla <span>this is</span> <span>one more text</span></b></div> 
     </td> 
    </tr> 
</table> 

,這是我的javascript

$(document).ready(function() {  
// delete all span in b 
$('b span').contents().unwrap(); 
// delete "blablabla" 
$("b:contains('blablabla')").html(function(i, text) { 
    return text.replace(/blablabla/g, ''); 
}); 

$("b").each(function() { 
    var bcont = $(this).text(); 
    var stxts = [ "this is another text", "this should not match" ]; 
    $.each(stxts, function(i, val) { 
     alert($("b").text()); 
     if (bcont == val) { 
      $(this).closest("tr").css({"background" : "green"}); 
     } 
    }); 
}); 

});

如果b標籤內的文本匹配其中一個stxts數組值,我想更改包含匹配的b標籤的tr標籤的背景顏色。 我在做什麼錯? 在if語句條件中,我嘗試了==比較和===。 在if語句中,我嘗試用$(「b」)替換$(this),但沒有結果。而不是$。每個我都試過for循環沒有運氣。 我敢肯定,我做錯了「功能內的另一個功能」的東西。 謝謝你的時間。

+0

SARPO,你仍然有問題? –

+0

@SPlatten你說得對,我應該學會使用錯誤處理來獲得更好的結果。您對我們正在檢查的代碼有何建議? – Sarpo

+0

@Sarpo,使用前務必檢查函數返回碼,函數參數也一樣,總是假設它們可能無效並檢查。 – SPlatten

回答

1

問題是$(this)裏面你的第二個.each()

你想$(this)代表第一.each()但因爲你的第二.each()使用$(this)它代表了一個。

使第一.each()喜歡裏面的$(this)變量:var $this = $(this)和使用$($this).closest("tr").css({"background-color": "green"});

$(document).ready(function() { 
 
    // delete all span in b 
 
    $('b span').contents().unwrap(); 
 
    // delete "blablabla" 
 
    $("b:contains('blablabla')").html(function(i, text) { 
 
    return text.replace(/blablabla/g, ''); 
 
    }); 
 

 
    $("b").each(function() { 
 
    var $this = $(this) 
 
    var bcont = $(this).text().trim(); 
 
    var stxts = ["this is another text", "this should not match"]; 
 
    $.each(stxts, function(i, val) { 
 
     if (bcont == val) { 
 
     $($this).closest("tr").css({ 
 
      "background": "green" 
 
     }); 
 
     } 
 
    }); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td> 
 
     <div><b>blablabla <span>some text</span></b></div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td> 
 
     <div><b><span>this is another text</span></b></div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td> 
 
     <div><b>blablabla <span>this is</span> <span>one more text</span></b></div> 
 
    </td> 
 
    </tr> 
 
</table>

+0

你的規則,事實上我試着顛倒這些函數(把「b」分別放在「數組」的每一個裏面)並且工作。無論如何,你的解決方案只是一個把戲。比較運算符呢?我應該使用相同還是相同的? – Sarpo

+0

@Sarpo我沒有看到使用相等運算符的任何問題。如果它工作正常,就使用它 –