#javascript #href #getattribute
Вопрос:
У меня есть список продуктов, и я хочу сделать так, чтобы цена продукта была доступной для кликабельности, как и название продукта, ссылающееся на тот же 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">€amp;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">€amp;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">€amp;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">€amp;nbsp;125,90</span>
</div>
</div>
</div>
</article>
Ответ №1:
Я не совсем уверен в вашей проблеме, но я думаю, что, возможно, это то, чего вы хотите.
Пожалуйста, дайте мне знать, если я что-то не так понял 🙂
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">€amp;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">€amp;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">€amp;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">€amp;nbsp;125,90</span>
</div>
</div>
</div>
</article>
Ответ №2:
Почему бы вам просто не указать цену в 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">€amp;nbsp;5,90</span>
</span>
</span>
</a>
</div>
</article>
Вам нужно было бы изменить внутреннее div
s на span
s, чтобы оно было семантическим HTML, и, возможно, внести некоторые изменения в CSS, чтобы получить правильный стиль, но это кажется лучшим решением.
Комментарии:
1. К сожалению, у меня нет доступа для изменения любого html-кода, поэтому мне приходится делать это на javascript. Может быть, мне следовало сказать это в своем вопросе