Javascript Simple If else innerHTML == 'something'不起作用



我有一个看似简单的javaScript函数,我正在尝试创建检查元素innerhtml的价值并根据答案吐出一个值,但是对于我的生活,我可以't使它起作用,没有任何错误。此功能是由OnClick事件触发的,不需要添加窗口。任何人都可以给我的任何洞察力都将不胜感激!这是我的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"但是所有其他控制台(KKDK)都没有。感谢您的帮助!

我已经用相关的html更新了原始问题,对此很抱歉。

您正在进行病例敏感的比较。您已经指出,将结果值与标题案例进行比较时,是所有上限。在比较之前,通过在两个操作数上调用tolowercase进行案例态度比较。另外,请实际发布您的标记。故障排除代码问题必须包含MCVE。 - 9分钟前碰撞

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

几乎可以肯定的是,您在Plantitleesd的开头/结束时都有Newline。尝试通过console.log('>' + planTitleesd + '<');替换console.log(planTitleesd);进行检查。

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

您应该避免在标签开启器/关闭和文本本身之间避免任何空间/新线:

<th id=planTitle>lala</th>

而不是

<th id=planTitle>
    lala
  </th>

为什么不沿着:使用.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';
    }
}

我也同意您应该删除案件敏感的字符串,例如(再次),可能会发生错别字等。

机会中只有一个错别字,或者您可能正在查看的空返回/新线。确保从响应中删除所有运输返回和更多的返回。看到AS,某些项目实际上可能会添加您没有注意到的项目。(例如一个公开标签的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('');

最新更新