【问题标题】:Creating a new href attribute using getAttribute & innerText with Javascript使用带有 Javascript 的 getAttribute 和 innerText 创建新的 href 属性
【发布时间】:2021-09-30 15:32:48
【问题描述】:

我有一个产品列表,我想做的是让产品的价格像链接到相同产品 URL 的产品标题一样可点击。

我创建了一个 for 循环来尝试执行此操作,但我遇到的问题是每个产品的每个 href 链接都是针对每个产品创建的,而我只需要一个带有相应 href 链接的价格。我该如何纠正这个问题?

注意:我无权更改原始 html,这就是我尝试在 javascript 中进行这些更改的原因

var getAllLinks = document.querySelectorAll('.productTitle').forEach(function(el){
    var createNewLinks = document.querySelectorAll('.productPrice').forEach(function (elem){
  elem.insertAdjacentHTML("afterend", "<a href=" + el.getAttribute('href') + ">"+ elem.innerText +"</a>");
  })    
});
.container {padding-bottom: 20px;}
<article class="container" data-ga-product="04245">
  <div class="productContent">
    <a class="productTitle" href="#product1">Product 1</a>
    <div class="productPriceContainer">
      <div class="productPrimary">
        <span class="productPrice">€&nbsp;5,90</span>
      </div>
    </div>
  </div>
</article>

<article class="container" data-ga-product="05395">
  <div class="productContent">
    <a class="productTitle" href="#product2">Product 2</a>
    <div class="productPriceContainer">
      <div class="productPrimary">
        <span class="productPrice">€&nbsp;145,90</span>
      </div>
    </div>
  </div>
</article>

<article class="container" data-ga-product="263743">
  <div class="productContent">
    <a class="productTitle" href="#product3">Product 3</a>
    <div class="productPriceContainer">
      <div class="productPrimary">
        <span class="productPrice">€&nbsp;35,90</span>
      </div>
    </div>
  </div>
</article>

<article class="container" data-ga-product="60493">
  <div class="productContent">
    <a class="productTitle" href="#product4">Product 4</a>
    <div class="productPriceContainer">
      <div class="productPrimary">
        <span class="productPrice">€&nbsp;125,90</span>
      </div>
    </div>
  </div>
</article>

【问题讨论】:

    标签: javascript href getattribute


    【解决方案1】:

    您为什么不直接在a 标签中包含价格,而完全忘记 JavaScript?

    <article class="container" data-ga-product="04245">
      <div class="productContent">
        <a class="productTitle" href="#product1">Product 1
          <span class="productPriceContainer">
            <span class="productPrimary">
              <span class="productPrice">€&nbsp;5,90</span>
            </span>
          </span>
        </a>
      </div>
    </article>
    

    您需要将内部的 divs 更改为 spans 以成为语义 HTML,并可能进行一些 CSS 更改以使样式恰到好处,但这似乎是一个更好的解决方案。

    【讨论】:

    • 不幸的是,我无权更改任何 html,这就是我必须在 javascript 中进行更改的原因。也许我应该在我的问题中说这个
    【解决方案2】:

    我不太确定您的问题,但我认为这也许就是您想要的。
    如果我弄错了,请告诉我:)

    var getLink = document.querySelectorAll('.productTitle');
    var newLink = document.querySelectorAll('.productPrice');
    
    getLink.forEach((link, i) => {
      newLink[i].insertAdjacentHTML("afterend", "<a href=" + link.getAttribute('href') + ">" + newLink[i].innerText + "</a>");
      newLink[i].remove();
    });
    .container {padding-bottom: 20px;}
    <article class="container" data-ga-product="04245">
      <div class="productContent">
        <a class="productTitle" href="#product1">Product 1</a>
        <div class="productPriceContainer">
          <div class="productPrimary">
            <span class="productPrice">€&nbsp;5,90</span>
          </div>
        </div>
      </div>
    </article>
    
    <article class="container" data-ga-product="05395">
      <div class="productContent">
        <a class="productTitle" href="#product2">Product 2</a>
        <div class="productPriceContainer">
          <div class="productPrimary">
            <span class="productPrice">€&nbsp;145,90</span>
          </div>
        </div>
      </div>
    </article>
    
    <article class="container" data-ga-product="263743">
      <div class="productContent">
        <a class="productTitle" href="#product3">Product 3</a>
        <div class="productPriceContainer">
          <div class="productPrimary">
            <span class="productPrice">€&nbsp;35,90</span>
          </div>
        </div>
      </div>
    </article>
    
    <article class="container" data-ga-product="60493">
      <div class="productContent">
        <a class="productTitle" href="#product4">Product 4</a>
        <div class="productPriceContainer">
          <div class="productPrimary">
            <span class="productPrice">€&nbsp;125,90</span>
          </div>
        </div>
      </div>
    </article>

    【讨论】: