querySelector
всегда возвращает первый соответствующий элемент. Таким образом, когда вы делаете
var addon = document.querySelector(".products-grid .item .product-name a:not(.product-image)").getAttribute('href');
вы выбираете first a
(тот, который вы получите в своей первой итерации).
Но вы можете сделать код намного чище, используя методы массива и регулярные выражения, соответствующие id
:
Array.prototype.forEach.call(
document.querySelectorAll(".products-grid .item .product-name a:not(.product-image)"),
(productNameElement) => {
const idMatch = productNameElement.href.match(/\d+$/);
if (idMatch) productNameElement.appendChild(document.createTextNode(idMatch[0]));
});
Также обратите внимание, что только некоторые элементов имеют идентификационный номер. Например, один из результатов поиска:
<a href="http://tomleemusic.ca/benchworld-sonata-1c-single-adjustable-artist-piano-bench-in-polished-walnut" title="BENCHWORLD SONATA 1c Single Adjustable Artist Piano Bench In Polished Walnut">BENCHWORLD SONATA 1c Single Adjustable Artist <span class="searchindex-highlight">Piano</span> Bench In Polished Walnut</a>
не имеет такового, поэтому было бы хорошо проверить, что сначала есть совпадение.