【问题标题】:Creating custom calculations using JavaScript (jQuery)使用 JavaScript (jQuery) 创建自定义计算
【发布时间】:2021-04-24 06:27:32
【问题描述】:

我希望获取包含在 <bdi> 标记中的 HTML 字符串的值 - 对其执行计算 - 并将结果输出到单独的 <bdi> 字符串中,具体取决于页面上选择的输入。

来源<bdi>的值会根据用户交互动态变化,但我想知道我所问的是否可行以及如何实现它的粗略指南?

说明用户元素的屏幕截图:

在 DOM 中,源值嵌套在下面的标签中:

<li class="grand_total">
  <span class="name">Grand Total</span> 
  <span class="price">
     <span class="woocommerce-Price-amount amount">
        <bdi>
          <span class="woocommerce-Price-currencySymbol">£</span>
          301.00
         </bdi>
     </span>
   </span>
</li>

如果选择了存款输入选项,我如何使用 jQuery 将这个值(或字符串 - 如果术语不正确,请见谅)除以 100 并乘以 20 - 然后在嵌套的目标中输出结果数字如下:

<li class="deposit_free_total">
   <span class="name">Due Today</span>
   <span class="price">
       <span class="woocommerce-Price-amount amount">
            <bdi>
               <span class="woocommerce-Price-currencySymbol">£</span>301.00
            </bdi>
       </span>
   </span>
</li>

需要选择以启动上述输入的 id 为#wc-option-pay-deposit。我不知道从哪里开始,所以非常感谢任何帮助!

进度更新:

我设计了以下代码,按预期工作:

<script>
jQuery(document).ready(function(changeToPay){
    if (jQuery('#wc-option-pay-deposit').is(':checked')) {
            (jQuery("h1").html("Test"));
    } 
})
jQuery(document).ready(function(){ 
    changeToPay();
});
</script>

似乎下一步是创建变量,以便获取数据并执行计算,但我不知道如何连接这些点...

【问题讨论】:

  • 您尝试实现的是更改屏幕上显示的内容...这不会影响用户单击“添加到购物篮”时发送到服务器的数据。
  • 是的,我要做的就是影响客户端和用户看到的内容。我不需要操作实际数据,但我不知道如何进行。

标签: jquery woocommerce calculation getelementsbyclassname intermediate-code


【解决方案1】:

假设您只想更改客户端显示的内容...

试试这个......如果它按预期工作,我将编辑解释。

jQuery(document).ready(function(changeToPay){

  setInterval(function(){
    if (jQuery('#wc-option-pay-deposit').is(':checked') && !jQuery(".deposit_free_total bdi").is(".calculated")) {
      jQuery(".deposit_free_total bdi").html(jQuery(".grand_total .woocommerce-Price-currencySymbol")[0].outerHTML + (parseFloat(jQuery(".grand_total bdi").text().replace("£","").trim())*0.2).toFixed(2)).addClass("calculated")
    } 
  },50)
  
})

EDIT 用于超过一千个 GB 数字格式:

您必须删除千位分隔符逗号...轻松使用.replace()
但是如果20%的结果仍然超过一千,你必须重新添加它!您需要带有特定选项的.toLocaleString()!我承认这不容易找到。

所以if 条件中的语句现在是:

jQuery(".deposit_free_total bdi").html(jQuery(".grand_total .woocommerce-Price-currencySymbol")[0].outerHTML + (parseFloat(jQuery(".grand_total bdi").text().replace("£","").replace(",","").trim())*0.2).toLocaleString('en-GB',{minimumFractionDigits:2, maximumFractionDigits:2})).addClass("calculated")

【讨论】:

  • 嘿,非常感谢您的回复和尝试的解决方案!从表面上看,您的代码看起来应该可以工作,尽管会引发控制台错误。请记住,您正在与一个绝对新手打交道,所以如果我没有正确包装,我很抱歉。您也许可以在直播页面上更好地看到它:freedomholidaysuk.co.uk/motorhomes/swift-escape-624
  • 我无法访问该页面:Block Reason: Access from your area has been temporarily limited for security reasons. -- 无论如何,你自己试试吧。
  • 您现在可以访问了吗?
  • 据我所知,它运行良好——你是个巫师!自己检查一下:)
  • 哈哈!不幸的是,这不是我的房车,但我确信可以为您安排大量折扣代码;)非常感谢您花时间研究解决方案,老实说,我认为这是不可能的。你已经度过了我的周末!
猜你喜欢
  • 2017-07-04
  • 1970-01-01
  • 2014-03-20
  • 2012-01-20
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多