Замените innerHTML, если строка похожа на 'price 0 & euro;'

0

Я пытаюсь заменить innerHTML span id = "price" с помощью jQuery. Я думаю, что я делаю это неправильно с RegExp.

$(function(){

    var element = $('#price');
    var contenu = element.innerHTML;
    var str = " 0 ";
    var re = new RegExp("^.*"+str+".*","gi"); 

    if (contenu.match(re)){    
        element.innerHTML="free";
    }
}); 

Когда я обновляю страницу, он ничего не возвращает.

Теги:

3 ответа

2
Лучший ответ

Если вы попытаетесь изменить содержимое элемента, если оно содержит строку " 0 ", вы можете просто сделать

$(function(){
    $('#price:contains(" 0 ")').html('free');
}); 

демонстрация

Если вы хотите изменить его, только если "0" - это весь контент, сделайте следующее:

$(function(){
    if ($('#price').text().trim()==="0") $('#price').text('free');
}); 
  • 0
    Это выглядит проще. Проблема в том, что элемент содержит не только «0», но и другой текст до и после 0.
  • 0
    См. Редактирование, если вы хотите изменить текст, только если не содержит ничего другого.
Показать ещё 2 комментария
0

Я думаю, вы хотите:

$(function(){
  var element = $('#price');
  var contenu = element.html();
  var str = " 0 ";
  var re = new RegExp("^.*"+str+".*","gi"); 

  if (contenu.match(re)){    
    element.html("free");
  }
});

jQuery не возвращает простой элемент DOM. Скорее, он возвращает массив каждого элемента DO, который соответствовал вам, селектор, завернутый в оболочку jQuery, поэтому не может просто использовать свойства DOM, такие как innerHTML. Если вы хотите, чтобы первый элемент соответствовал селектору '#price' как необработанный элемент DOM, вы могли бы использовать $('#price')[0] а затем $('#price')[0].innerHTML будет работать как ожидается. В качестве альтернативы вы можете использовать философию jQuery и использовать $('#price').html() чтобы получить значение или $('#price').html(value) чтобы установить значение.

0

Эта:

var element = $('#price');

вернет вам массив jQuery, а не элемент DOM. Он не имеет таких свойств, как innerHTML. Вам нужно получить фактический элемент DOM.

Попробуйте это, прежде чем продолжить:

var element = $('#price')[0];

Или переработайте свой код для работы с результатами jQuery:

$(function(){

    var element = $('#price');
    var contenu = element.html();
    var str = " 0 ";
    var re = new RegExp("^.*"+str+".*","gi"); 

    if (contenu.match(re)){    
        element.html("free");
    }
}); 

Я не могу точно сказать, правильное ли ваше регулярное выражение. Вы не предоставили конкретный образец ввода своего содержимого диапазона.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню