если div содержит текст, обновите другое содержимое div - PullRequest
0 голосов
/ 30 августа 2018

У меня есть magento веб-сайт, я пытаюсь отсканировать таблицу на наличие кода скидки и обновить другую часть таблицы, если код скидки присутствует.

Код, который я использую для достижения этой цели, приведен ниже:

    console.log("Discount Code Script Loaded");
$(function(){
    if($('#checkout-review-table-wrapper p').text().replace(/\W/g, '')=="NathanTest9856"){
        console.log("Found code");
        $('span.price p').html("£0.00");
        console.log("Shipping Total Corrected");
    } else{
        console.log("Coupon Code Not Found")
    }    
    console.log("Discount Code Script Completed");
});
console.log($('#checkout-review-table-wrapper p').text().replace(/\W/g, ''));

Ниже приведен упрощенный код страницы:

<body>
  <div id="checkout-review-table-wrapper">
    <p>
      Discount Code (NathanTest9856)
    </p>
  </div>
<span class="price">
  <p>
     £15.00
 </p>
</span>
</body>

Это также можно найти в jsfiddle по адресу: https://jsfiddle.net/nlangerdevcenturion/qu6bvrc0/35/

Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что она не может обнаружить код скидки NathanTest9856 в теге p.

Как видно из следующей ошибки: Uncaught TypeError: Cannot read property 'text' of null at centurion.js:12

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы можете использовать jquery :contains, чтобы проверить, содержит ли элемент что-то (в данном случае некоторый текст).

Изменение:

if($('#checkout-review-table-wrapper p').text().replace(/\W/g, '')=="NathanTest9856"){

до:

if ($('#checkout-review-table-wrapper p:contains("NathanTest9856")')) {

Обновленный код:

console.log("Discount Code Script Loaded");
$(function() {
  if ($('#checkout-review-table-wrapper p:contains("NathanTest9856")')) {
    console.log("**** Found code ****");
    $('span.price p').html("&pound;0.00");
    console.log("Shipping Total Corrected");
  } else {
    console.log("Coupon Code Not Found")
  }
  console.log("Discount Code Script Completed");
});
console.log($('#checkout-review-table-wrapper p').text().replace(/\W/g, ''));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
  <div id="checkout-review-table-wrapper">
    <p>
      Discount Code (NathanTest9856)
    </p>
  </div>
  <span class="price">
  <p>
     £15.00
 </p>
</span>
</body>

Обновленная скрипка: https://jsfiddle.net/qu6bvrc0/59/

В качестве альтернативы, вы можете использовать множество ванильных javascript-методов на .text(), подробнее см. Здесь: https://stackoverflow.com/a/1789952/2181514

например:

if ($('#checkout-review-table-wrapper p').text().indexOf("NathanTest9856")) >= 0) {
0 голосов
/ 30 августа 2018

Проблема в RegExp /\W/g. Это заменит все несловарные символы (в данном случае пробелы), и вы останетесь с DiscountCodeNathanTest9856 , который не равен NathanTest9856

Вместо этого вы можете использовать подобное условие

/\(NathanTest9856\)/.test($('#checkout-review-table-wrapper p').text())

Который проверит текст этого абзаца на наличие строки (NathanTest9856) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...