2014-02-27 89 views
0
var searchString = '<strong>Applicable Discounts:</strong>'; 
    if ($(".cobhl td:contains('" + searchString + "')")) { 
     $("#shipoptionstable td:contains('Free')").remove(); 
    } else { 
     alert("do nothing!"); 
    };  

由於某些原因,該函數正在運行並刪除shipoptionstable類錶行,即使if條件未被滿足?有什麼建議麼?我難倒了!jQuery如果不工作正確

+3

'如果($(」 cobhl TD:包含('」。+搜索字符串+ 「')」)長度)'因爲即使是空的jQuery對象是真正 –

+1

你的意思是 'truthy' :) – MMM

+0

@ MMM thx的更正;) –

回答

2

兩點:第一,$(".cobhl td:contains('" + searchString + "')")結果將總是是一個jQuery對象,無論searchString值。實際上,即使DOM不包含類cobhl的元素,或者它沒有,但該元素沒有decendant td元素,它仍然會返回一個jQuery對象。

接下來,一個非空的非未定義的對象是「truthy」,這意味着它不具有字面意義上的布爾值true,但它在if子句的用途中的確評估爲true。

你真正想測試的是返回的jQuery對象是否具有非零長度。例如:

if ($(".cobhl td:contains('" + searchString + "')").length > 0) { 
    ... 

更新 寫出下列值到控制檯將幫助你進一步調試問題:

console.log("number of .cobhl elements: " + $(".cobhl").length); 
console.log("number of .cobhl td elements: " + $(".cobhl td").length); 
console.log("number of .cobhl td:contains('" + searchString + "') elements: " + $(".cobhl td:contains('" + searchString + "')").length); 

檢查從這些語句的輸出。你有沒有使用.cobhl選擇器?如果是,那麼下面的任何td元素?如果是的話,searchString值是你期望的嗎?

通常在這種情況下,我發現我在選擇器鏈上有一個錯字。這種按時分解選擇器的技術可以幫助我找到它。

+0

謝謝,我已經嘗試了您的建議,並且它是有道理的,但它仍然與以前一樣,如果不存在折扣字段,則不會彈出,但仍會刪除免費選項。 – BWalt302

+0

我確實有cobhl類的多個表。我應該爲此做一個班嗎?會導致問題嗎? 控制檯返回: 編號.cobhl元素:11 編號.cobhl td元素:0 編號。cobhl td:contains('適用折扣:')元素:1 但是,有0個TD實例與適用折扣:顯示出來,這是運行警報所需的。如果我輸入優惠券代碼,我仍會得到1。 – BWalt302

+0

當你寫有0個實例「顯示」時,你的意思是文檔中還存在另外一個這樣的元素,但是不可見?如果是這樣,它是不是可見的,因爲它的CSS顯示屬性設置爲none或其可見屬性設置爲隱藏或是因爲該元素只是滾動視圖? – dgvid

0

我能弄明白!有時你只需要離開一下!今天早上回來,並在幾分鐘內解決它!

<script> 
var item = $('.cobhlappdisc'); 
for (var i = 0; i <= item.length; i++) { 
    if ($(item[i]).text() == 'Applicable Discounts:') { 
     alert("Did Stuff") 
    }else{ 
     alert("Nope") 
     } 
} 
</script> 
+0

很高興你找到了解決方案。可能我建議你開始使用'console.log'而不是'alert'來進行調試。使用Chrome等瀏覽器,內置了用於調試的工具,甚至Firefox中的Firebug。 –