Как присвоить переменной js цену товара

334
15 ноября 2021, 02:40

На странице выведено несколько товаров в каталоге (Woocommerce), мне нужно на этой же странице вывести по клику на "Добавить в корзину" цену именно того товара, по чьей кнопке "Добавить в корзину" кликнуть.

Нашел два варианта кода, но первый вариант

 $('.add_to_cart_button').click(function() { 
 
var price = $('.woocommerce-Price-amount').html(); 
        $("#summ2").text(price + ' руб.' ); 
	})

выдает html-код первого товара на странице, а не того, по чьей кнопке был клик -

<span class="woocommerce-Price-currencySymbol">£</span>77.00 руб.

А второй вариант

$('.add_to_cart_button').click(function() { 
 
   var price = $('.woocommerce-Price-amount').text(); 
   
        $("#summ2").text(price + ' руб.' ); 
		 
	})

выдает все цены товаров с этой страницы:

£77.00£32,333.00£777.00£555.00 руб.

Вопрос: как здесь вывести цену именно того товара, по чьей кнопке "Добавить в корзину" был клик.

Всем огромное спасибо за ответ.

update

teran, извиняюсь за вид кода, просто спешу ответить

<div class="woocommerce columns-4 "><ul class="products columns-4"> 
 
<li class="product type-product post-846 status-publish instock product_cat-osnhands shipping-taxable purchasable product-type-simple"> 
	<a href="http://wp-test.mccol.com.ua/?product=%d0%be%d1%81%d0%bd%d0%b0%d1%81%d1%82%d0%ba%d0%b0-%d1%80%d1%83%d1%87%d0%bd%d0%b0%d1%8f-2" class="woocommerce-LoopProduct-link woocommerce-loop-product__link"><img width="250" height="250" src="http://wp-test.mccol.com.ua/wp-content/uploads/woocommerce-placeholder-250x250.png" class="woocommerce-placeholder wp-post-image" alt="Заполнитель" srcset="" sizes="(max-width: 250px) 85vw, 250px" /><h2 class="woocommerce-loop-product__title">Оснастка ручная 2 груп</h2> 
	<span class="price"><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">&pound;</span>777.00</span></span> 
</a><a href="?add-to-cart=846" data-quantity="1" class="button product_type_simple add_to_cart_button ajax_add_to_cart" data-product_id="846" data-product_sku="" aria-label="Добавить &quot;Оснастка ручная 2 груп&quot; в корзину" rel="nofollow">В корзину</a></li> 
<li class="product type-product post-845 status-publish instock product_cat-osnhands shipping-taxable purchasable product-type-simple"> 
	<a href="http://wp-test.mccol.com.ua/?product=%d0%be%d1%81%d0%bd%d0%b0%d1%81%d1%82%d0%ba%d0%b0-%d1%80%d1%83%d1%87%d0%bd%d0%b0%d1%8f-1" class="woocommerce-LoopProduct-link woocommerce-loop-product__link"><img width="250" height="250" src="http://wp-test.mccol.com.ua/wp-content/uploads/woocommerce-placeholder-250x250.png" class="woocommerce-placeholder wp-post-image" alt="Заполнитель" srcset="" sizes="(max-width: 250px) 85vw, 250px" /><h2 class="woocommerce-loop-product__title">Оснастка ручная 1 груп</h2> 
	<span class="price"><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">&pound;</span>555.00</span></span> 
</a><a href="?add-to-cart=845" data-quantity="1" class="button product_type_simple add_to_cart_button ajax_add_to_cart" data-product_id="845" data-product_sku="" aria-label="Добавить &quot;Оснастка ручная 1 груп&quot; в корзину" rel="nofollow">В корзину</a></li> 
</ul> 
</div>

Answer 1

Если не менять верстку, то код будет примерно следующий:

$(".add_to_cart_button").click(function(){
    let price = $(this).closest('li').find(".price").text();
    $("#summ2").text( price );
});

вы получите результат вместе с символом фунтов. но можете либо заменить его с помощью replace, либо выдрать из этой строки цену с помощью регулярок.

но оптимальнее было бы изменить верстку и к самой ссылке по которой кликаете добавить атрибут data-price со значением цены, либо к li.

Answer 2

var list = document.querySelector('.list'); 
 
list.addEventListener('click', getPrice); 
 
function getPrice({target}) { 
  if (target.classList.contains('list__item')) { 
    var price = target.dataset.price; 
    target.innerText = price; 
  } 
}
body { 
  margin: 0; 
  height: 100vh; 
  display: flex; 
  justify-content: center; 
  align-items: center; 
} 
 
.list { 
  list-style: none; 
} 
 
.list__item { 
  cursor: pointer; 
  font-size: 3rem; 
  text-align: center; 
}
<ul class="list"> 
  <li class="list__item" data-price="30$">get price</li> 
  <li class="list__item" data-price="10$">get price</li> 
  <li class="list__item" data-price="20$">get price</li> 
</ul>

Answer 3

Так попробуйте:

var myButtons = document.getElementsByClassName("yourButtons");
    for(var x=0; x<myButtons.length; x++) {
         myButtons[x].addEventListener("click", function() { 
            var price = this.innerHTML;
            // далее с ценой делайте что угодно
    })};
Answer 4

огромное спасибо за ответ.

var myButtons = document.getElementsByClassName("add_to_cart_button"); 
    for(var x=0; x<myButtons.length; x++) { 
         myButtons[x].addEventListener("click", function() {  
            var price = this.innerHTML; 
            // далее с ценой делайте что угодно 
$("#summ2").text(price + ' руб.' ); 
    })};

Но результат этого кода -

В корзину руб.

Цена товара не выводится...(

READ ALSO
Реализация кнопки &quot;показать еще&quot;

Реализация кнопки "показать еще"

Проблема в том, что в мой addEventListener попадают немного не те данные, и я не могу понять в чем дело, хоть и объявил функцию общуюПросто кода слишком...

130
Как убрать фоновую заливку в svg

Как убрать фоновую заливку в svg

Есть svg, он соединен через use с тегом path, в котором нарисован логотип из линийНа странице он отображается полностью залитым, а нужно, чтобы...

126
input type range, noUiSlider не делает десятичные числа

input type range, noUiSlider не делает десятичные числа

Нужно сверстать вот такой input range, использую noUiSlider

261
JS Ajax Не отправляются данные с формы в файл php

JS Ajax Не отправляются данные с формы в файл php

На сайте установлена тема DiviВ ней я не разбираюсь, но задача была отправить форму на почту админу

218