jQuery如果那时候没有正常工作

时间:2014-02-27 20:13:49

标签: jquery if-statement

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

由于某种原因,即使没有满足if条件,函数也在运行并删除shipoptionstable类表行?有什么建议?我很难过!

2 个答案:

答案 0 :(得分:2)

两点:首先,无论$(".cobhl td:contains('" + searchString + "')")的值如何,searchString的结果总是是一个jQuery对象。实际上,即使DOM不包含具有类cobhl的元素,或者它确实存在,但该元素没有后代td元素,它仍然会返回一个jQuery对象。

接下来,非空的,未定义的对象是“真实的”,意味着它实际上没有布尔值true,但它确实为了if子句的目的而评估为真。

您实际想要测试的是返回的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值是否符合预期?

通常情况下,在这种情况下,我发现选择器链上的拼写错误。这种分解选择器的技术有助于我找到它。

答案 1 :(得分: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>