我有一个看似简单的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)都没有。谢谢你的帮助!
答案 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('');