javascript
  • jquery
  • replace
  • 2011-12-21 3 views 2 likes 
    2

    Я пытаюсь создать своего рода «шаблон» в простом старом html, который затем может содержать элементы, вставленные другой функцией javascript.Javascript replace - не работает со строкой html

    Таким образом, я получил

    var string = "<div id='<@nameInsert>' style='padding: 2px;'>here's some text and stuff</div>"; 
    

    И в функции Я пытаюсь заменить < @nameInsert> с именем я использую ...

    string.replace("/<@nameInsert>", "525"); 
    

    Но, это не работает. Какая-то побега, неправильная идея, или что?

    +0

    Конечно, это не работает? http://jsfiddle.net/alfabravoteam/xLdQT/ – Alfabravo

    ответ

    2

    Не используйте кавычки, если вы хотите использовать регулярные выражения

    string.replace(/<@nameInsert>/, "525"); 
    

    Но в вашем случае, если вы на самом деле не нужны регулярные выражения. Просто используйте строку:

    string.replace("<@nameInsert>", "525"); 
    
    +0

    Человек добрый Бог - прямо, сделано. Как это получается? – waxical

    0

    для меня это работает нормально, как это,

    string=string.replace("<@nameInsert>", "525"); 
    

    вот пример

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html> 
    <head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
        <script language="javascript"> 
    
        function test(){ 
        var string = "<div id='<@nameInsert>' style='padding: 2px;'>here's some text and stuff</div>"; 
        string=string.replace("<@nameInsert>", "525"); 
        alert(string); 
        } 
    
    </script> 
    </head> 
    <body> 
        <input type="button" value="test" name="test" onclick="test()"> 
    
    </body> 
    </html> 
    
    3

    Он не работает, потому что вы пытаетесь заменить а строка, которая не существует в другой строке.

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

    string.replace("<@nameInsert>", "525"); 
    

    и вы можете заменить с помощью регулярного выражения:

    string.replace(/<@nameInsert>/, "525"); 
    

    Части с косой чертой является регулярным выражением буквального, что дает тот же результат, как:

    string.replace(new RegExp("<@nameInsert>"), "525"); 
    

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

    string.replace(/<@nameInsert>/g, "525"); 
    
    +0

    Спасибо, Guffa. Одна из проблем заключается в том, что это не работает для контента в тегах - например, поиск и замена «текста» - не работает? – waxical

    +1

    @waxical: метод 'replace' не заботится о том, чтобы строка содержала HTML-код; текст внутри тега не обрабатывается по-разному. Обратите внимание, что метод 'replace' не меняет строку, он возвращает новую строку. Вы должны использовать возвращаемое значение: 'string = string.replace (/ text/g, 'woohaa!');'. – Guffa

    +0

    Спасибо, Guffa. В конце концов я тоже нашел этот бит. – waxical

    0

    Не имеет значения, если вы используете косую черту (/) или цитату (") для этого, так как у вас есть только одна строка для замены .., но просто убедитесь, что вы понимаете метод замены .. это не будет заменить существующую строку, а возвращает модифицированную копию .. так что вы можете сделать это следующим образом:

    string = string.replace(/<@nameInsert>/, "525"); 
    
    Смежные вопросы