【问题标题】:dynamically changing more than one query value in the Href attribute with jquery使用 jquery 动态更改 Href 属性中的多个查询值
【发布时间】:2019-08-25 03:19:38
【问题描述】:

我需要在 Href 属性中同时动态更改多个查询值。 我已经正确设置了我选择包含查询值的某些选项卡的data-name 的部分。

但现在我不知道如何设置允许我更改 url 的代码的 jquery 部分

在这里你可以看到我的代码:

$( document ).ready(function() {
  $('.tab-soggiorno').on('click',function(valueSoggiorno){
           console.log(valueSoggiorno['currentTarget']);
            var nameSoggiorno = $(valueSoggiorno['currentTarget']).data('name');
            console.log(nameSoggiorno);
            //var url = $("link-" + allest).attr("href");
        //$("link-" + allest).attr("href", "?pavimento=" +nome); 
      });


      $('.tab-bagno').on('click',function(valueBagno){
            console.log(valueBagno['currentTarget']);
            var nameBagno = $(valueBagno['currentTarget']).data('name'); 
            console.log(nameBagno);
            //var url = $("link-" + allest).attr("href");
        //$("link-" + allest).attr("href", "?pavimento=" +nome);   
        });

        $('.button').each(function(){
                var currenthref = $(this).attr("href");
                if(currenthref.includes('&soggiorno=')){
                    var ti=currenthref.indexOf('&soggiorno=');
                    var ti2=currenthref.indexOf('&bagno=');
                    currenthref1 = currenthref.substring(0, ti);
                    currenthref2 = currenthref1.substring(ti, 100000);
   
                }
                $(this).attr("href", currenthref1 + "&soggiorno=" + nameSoggiorno + "&bagno=" + nameBagno);
            });
            

 });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <a data-name="Ceramica Mirage - jewels, colore 16" class="tab-bagno">1</a>
  <a data-name="Ceramica Mirage - jewels, colore 14" class="tab-bagno">2</a>
  <a data-name="Ceramica Mirage - jewels, colore 6" class="tab-bagno">3</a>
</div>
                  
                  
<div>
  <a data-name="Parquet Castiglioni - Verniciato 05" class="tab-soggiorno">4</a>
  <a data-name="Parquet Castiglioni - Verniciato Naturale" class="tab-soggiorno">5</a>
  <a data-name="Parquet Castiglioni - Verniciato 09" class="tab-soggiorno">6</a>
</div>


<a class="button" href="checkout.php?&allestimento=Silver&soggiorno=INSERT-SOGGIORNO&bagno=INSERT-BAGNO" >select</a>

编辑更具体:

我希望,当我点击一个链接(请参阅 )时,我可以收集数据名称。然后,当我拥有该数据名称时,我想动态更改 .button href 属性中的查询值。如您所见,href 有两个名为 &soggiorno=INSERT-SOGGIORNO 和 &bagno=INSERT-bagno 的查询,对于这些查询,我想将数据名称分别设置为值

【问题讨论】:

  • 您好,欢迎来到栈溢出!你的问题对我来说有点模糊,试着解释你试图实现的行为,到目前为止你做了什么?代码 sn-p 也会产生错误。
  • 嗨!我想要这样,当我点击一个链接(请参阅&lt;a&gt;)时,我可以收集data-name。然后,当我拥有 data-name 时,我想动态更改 button href 属性中的查询值。如您所见,href 有两个名为 &amp;soggiorno=INSERT-SOGGIORNO&amp;bagno=INSERT-bagno 的查询,对于这些查询,我想将 data-name 设置为值
  • 请注意&lt;button&gt; 没有href。请改用&lt;a&gt;
  • 抱歉,我改了问题。在急于发布问题时,我使用了错误的标签

标签: javascript jquery html url href


【解决方案1】:

您可以使用attr(attributeName, function) 并返回一个新值。

使用内置的URL API 也更简单。


使用少量数据属性且具有与 href 查询字符串中的值不同的值的基本示例

$('a').attr('href', function() {
  const url = new URL(this.href),
    params = url.searchParams,
    data = $(this).data();

  $.each(data, function(k, v) {
    if (!params.has(k)) {
      console.log('Params missing : ', k)
      params.set(k, v)
    } else if (params.get(k) !== v) {
      console.log('params have different value for : ', k);
      params.set(k, v);
    }

  });
  console.log('New query string:', url.search);
  // return new href
  return url.href;

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a data-foo="1" data-bar="2" href="/somepath?foo=3">Test</a>

【讨论】:

  • 其实我需要修改button里面的href,而不是&lt;a&gt;里面。单击&lt;a&gt; 后,我需要动态更改button。我不能让它工作,因为我有两个不同的查询
  • 按钮没有href。你为什么使用&lt;button&gt;。无论如何,关于使用 URL API 的原则是相同的。可以将任何有效的 url 字符串传递给它。正如我的回答中所述,我的示例是基本的,您需​​要适应您的情况。我不会为你重写你所有的逻辑
【解决方案2】:

您必须定义变量 nameSoggiorno ,namaBagno 并进行更改以更改 href 代码如下

     $( document ).ready(function() {
    var nameBagno ='a';
    var nameSoggiorno = 'a';
  $('.tab-soggiorno').on('click',function(valueSoggiorno){
           console.log(valueSoggiorno['currentTarget']);
            nameSoggiorno = $(valueSoggiorno['currentTarget']).data('name');
            console.log(nameSoggiorno);

           var vars = [];

           var parts = $('.botton').attr('href').replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
               if(key == 'soggiorno')
               {
                   value = nameSoggiorno;
               }
               vars.push({key:key, value:value});

           });
    var href="checkout.php?allestimento="+vars[0].value+"&soggiorno="+vars[1].value+"&bagno="+vars[2].value+"";
    $('.botton').attr('href', href)

  });


      $('.tab-bagno').on('click',function(valueBagno){
            console.log(valueBagno['currentTarget']);
            nameBagno = $(valueBagno['currentTarget']).data('name'); 
            console.log(nameBagno);
           var vars = [];

           var parts = $('.botton').attr('href').replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
               if(key == 'bagno')
               {
                   value = nameBagno;
               }
               vars.push({key:key, value:value});

           });
    var href="checkout.php?allestimento="+vars[0].value+"&soggiorno="+vars[1].value+"&bagno="+vars[2].value+"";
    $('.botton').attr('href', href)   
        });




 });

【讨论】:

  • 您需要将 href 分配给当前的 botton....而不是每个 &lt;a&gt; 或每个 &lt;a&gt; 将具有相同的 href
  • 你想通过向按钮添加href来实现什么?
  • 它应该是 &lt;a&gt; 而不是 &lt;button&gt; 。上面对此发表了评论
  • 其实我需要修改button里面的href,而不是&lt;a&gt;里面。单击&lt;a&gt; 后,我需要动态更改button。我不能让它工作,因为我有两个不同的查询
  • 我已经根据您的要求更新了我的解决方案,您可以查看上述解决方案:)
猜你喜欢
  • 1970-01-01
  • 2014-07-21
  • 2015-07-16
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多