2015-02-24 2 views
0

У меня есть этот HTML:Заменить HTML текст с JQuery

<div class="field-item even">0,00 €</div> 

Я имею эту функцию, чтобы заменить какой-нибудь текст, который работает отлично:

$('.field-name-commerce-price .field-item').html(function(i, oldhtml) { 
    return oldhtml.replace('0,00 €', '<span style="font-size:13px;">No price</span>'); 

}); 

Но мне нужно, чтобы изменить функцию это , который не работает вообще (ошибки в console.log):

$('.field-name-commerce-price .field-item').html(function(i, oldhtml) { 
    return oldhtml.replace('>0,00 €<', '><span style="font-size:13px;">No price</span><'); 

}); 

Как вы можете видеть, я просто добавил некоторые «<» и «>».

На всякий случай вы хотите знать, зачем мне это нужно: мне нужно избежать функции, чтобы заменить такие значения, как «150,00 €», «90, 00» и так далее. Мне нужно это, чтобы заменить значение «0,00 €», только это.

+2

Wouldn» t регулярное выражение имеет больше смысла? – j08691

+0

Что произойдет, когда вы напишете '<' вместо '<' и '>' вместо '>'? Я имел в виду единственные, а не те, которые являются частью html-тега – reporter

+1

@reporter. Ничего не произошло бы, потому что это попытка сопоставить объект HTML с фактическим закрывающим тегом. – j08691

ответ

3

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

return oldhtml.replace(/^0,00 €$/, '<span style="font-size:13px;">No price</span>'); 
+1

Это правильный ответ, и самый простой. – j08691

+0

хорошо один. Благодарю. – JPashs

1

Это очень понятно, почему вы никогда не должны были бы сделать это, но:

Проблема заключается в том, что > и < не является частью HTML содержимого из .field-info тега, они являются тегами , Вызов .html() не возвращает теги, которые обертывают текущий узел.

Учитывая этот HTML фрагмент в DOM ...

<div class="field-name-commerce-price"> 
    <div class="field-item even">0,00 €</div> 
</div> 

Использование $(.field-item).html() возвратит 0,00 €, HTML-содержимое тега выбранного. Нет > или < для соответствия.

Если вы хотите заменить часть самих тегов, вы можете перейти к родительскому элементу элемента. Использование $('.field-item').parent().html() вернет HTML-код вложенного элемента, <div class="field-item even">0,00 €</div>, который будет соответствовать вашему replace.

Попробуйте следующее:

$('.field-name-commerce-price .field-item').html(function(i, oldhtml) { 
    return oldhtml.parent().replace('>0,00 €<', '><span style="font-size:13px;">No price</span><'); 

}); 

-

RE: Ваши обновления

Только в случае, если вы хотите знать, почему я должен сделать это: Мне нужно, чтобы избежать чтобы заменить такие значения, как «150,00 €», «90, 00 €» и так далее. Мне нужно это, чтобы заменить значение «0,00 €», только это.

Затем, используя > и < в качестве разделителей на вашей замены строки является неправильным решением. Либо используйте простую проверку равенства ...

if ('0,00 €' == $('.field-name-commerce-price .field-item').text()) { 
    $('.field-name-commerce-price .field-item').html('<span style="font-size:13px;">No price</span>'); 
} 

Или использовать регулярные выражения, и прикрепить шаблон поиска с ^ и $, или добавить границы раны:

$('.field-name-commerce-price .field-item').html(function(i, oldhtml) { 
    return oldhtml.replace(/\b0,00 €\b/, '<span style="font-size:13px;">No price</span>'); 
}); 
Смежные вопросы