Javascript简单如果还有innerHTML =='某事'不起作用

时间:2016-12-05 17:00:47

标签: javascript if-statement

我有一个看似简单的javascript函数,我试图创建它来检查元素innerHTML的值,并根据答案吐出一个值,但对于我的生活,我无法让它工作,不要得到任何错误。此函数由onclick事件触发,不需要添加window.onload。任何人都可以给我的任何见解将不胜感激!这是我的HTML

<div class="col-md-8 col-xs-9 product-info">
  <p id="planTitle" class="bold m-b-2">20 DAY SUPPLY // 40 CAPSULES // FMF</p>
  <p>Price: <span class="pull-right" id="plan-amount">$79</span></p>
  <p>Tax: <span class="pull-right">Included</span></p>
   <p id="shipping-line">Shipping: <span class="pull-right" id="cart-shipping-cost">$9.99</span></p>
    <p class="hidden">Coupon: <span class="pull-right" id="coupon-code">firstmonthfree20day</span></p>
</div>

我的Javascript

function updateShippingCost(country_region) {
    var url;

    var kkdk = '';
    var planTitleesd = document.getElementById('planTitle').innerHTML;
    console.log(planTitleesd);
    if (planTitleesd == '10 Day Supply // 20 Capsules // FMF') {
        kkdk = '5.99';
        console.log(kkdk);
    } else if (planTitleesd == '20 Day Supply // 40 Capsules // FMF') {
        kkdk = '9.99';
        console.log(kkdk);
    } else if (planTitleesd == '30 Day Supply // 60 Capsules // FMF') {
        kkdk = '14.99';
        console.log(kkdk);
    }
}

奇怪的是,console.log(planTitleesd)返回一个值,例如 “20天供应// 40胶囊// FMF” 但所有其他console.log(kkdk)都没有。谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

我已使用相关HTML更新了原始问题,对不起。

  

您正在进行区分大小写的比较。您已经指出结果值是全部上限,而您将其与Title Case进行比较。考虑在比较之前通过在两个操作数上调用toLowerCase来进行大小写的比较。另外,请实际发布您的标记。代码问题疑难解答必须包含MCVE。 - CollinD 9分钟前

这是我正在寻找的简单问题的简单答案 - 感谢CollinD!

答案 1 :(得分:0)

几乎可以肯定你在planTitleesd的开头/结尾有换行符。 尝试将console.log(planTitleesd);替换为console.log('>' + planTitleesd + '<');来检查。

这是一个例子: https://jsfiddle.net/324aw9zz/1/

你应该避免标签开启/关闭和文本本身之间的任何空格/换行符:

<th id=planTitle>lala</th>

而不是

<th id=planTitle>
    lala
  </th>

答案 2 :(得分:0)

为什么不做更多的事情: 使用.indexOf()检查一个(或多个)字符串?

function updateShippingCost(country_region) {
    var url;

    var kkdk = '';
    var planTitleesd = document.getElementById('planTitle').innerHTML;

    if ( planTitleesd.indexOf('10 Day') > -1 && planTitleesd.indexOf('20 Capsules') > -1 ) {
        kkdk = '5.99';
    } else if (planTitleesd.indexOf('20 Day')) {
        kkdk = '9.99';
    } else if (planTitleesd.indexOf('30 Day')) {
        kkdk = '14.99';
    }
}

我也同意你应该删除区分大小写的字符串,因为,(再次),可能会发生拼写错误等。

可能是价值中只有一个拼写错误,或者您可能正在查看的空回报/换行符。 确保从响应中删除所有回车符和更多回车符。看来,有些项目实际上可能会添加一些您没有注意到的项目。 (例如公开标签的div)

听起来这个应用程序是一个商店,可能会变得非常大。我建议也许是一个返回你需要的结果的对象。

如果您可以创建一个合适的JSON对象,我认为以下JSFiddle会简化您的过程。 https://jsfiddle.net/0sscf798/

function updateShippingCost(country_region) {
        var url;
        var kkdk = '';
        var planTitleArr = [];
        var planTitleObj = {};
        var planTitleesd = document.getElementById('planTitle').innerHTML;

        // This would most likely be a JSON response of items from the page/category
        planTitleObj = {
            "10 Day Supply": {
              "20 Capsules": {
                "FMF": 1.23
              }
            },
            "20 Day Supply": {
              "20 Capsules": {
                "FMF": 4.56
              }
            }
          };

      planTitleArr = planTitleesd.split(" // ");
      var price = planTitleObj[planTitleArr[0]][planTitleArr[1]][planTitleArr[2]] || "There is a problem with the price."

      alert("The Price is: " + price);
}
updateShippingCost('');