jQuery - заменить слово в тексте значением переменной - PullRequest
2 голосов
/ 04 октября 2011

Все, что я мог понять, как сделать с помощью jQuery replace, - это заменить конкретный текст конкретным текстом.К сожалению, я не могу сделать это с переменной.

Это пример того, что я пытаюсь сделать:

$("#id").html($("#id").html().replace(/myVariableHere/g, 'hello')); 

myVariableHere - это место, где я хочу поместить переменную,Если я жестко закодирую текст там, все работает нормально.Но так как это значение будет динамическим (в зависимости от того, что вы нажимаете), я должен поместить туда переменную, а не жестко закодированное слово ... Что не так с моим синтаксисом?

Заранее спасибо!:)

Ответы [ 4 ]

2 голосов
/ 04 октября 2011

Объект RegExp вместо литеральной формы:

var patt=new RegExp(myVariableHere,'g');
$("#id").html($("#id").html().replace(patt, 'hello')); 
0 голосов
/ 30 апреля 2013

Я использовал приведенный ниже фрагмент

$(this).text($(this).text().replace(old_word, new_word));

, где $ (this) - объект, содержащий текст, который вы хотите заменить

0 голосов
/ 04 октября 2011

Обратите внимание, что когда вы делаете замены в HTML-содержимом элемента (то, что .html() возвращает / устанавливает), вы фактически заменяете HTML-код, включая имена тегов, классы и т. Д. Итак, если заменяемый вами текст является тегом HTML или именем класса, вы можете разбить документ. Чтобы избежать этого, обойдите дочерние узлы родительского элемента и замените только текстовые узлы:

function replaceText($elem, text, replacement) {
    // Check if the element has just one child, and the child is a text node
    if ($elem[0].childNodes.length == 1 && $elem[0].firstChild.nodeType == 3)
        $elem.text($elem.text().replace(text, replacement));
    else
        // Call the replacement function on each child element
        $elem.children().each(function () {
            replaceText($(this), text, replacement);
        });
}
0 голосов
/ 04 октября 2011

Зачем вообще использовать регулярные выражения?

$("#id").html($("#id").html().replace(myVariableHere, 'hello'));
...