2011-10-31 14 views
19

¿Hay alguna manera de hacer algo similar a ruby ​​gsub en javascript? Tengo un archivo html local que quiero procesar y reemplazar ciertas variables de plantilla con contenido, pero no puedo encontrar la manera de sustituir las variables de plantilla con el nuevo contenido. El HTML contiene fragmentos, como a continuación:¿Existe algo similar a gsub en javascript?

<div id="content"> 
    <h1>{{title}}</h1> 
    {{content}} 
</div> 

Ahora bien, si envuelvo cada variables de plantilla en un div llamado entonces puedo usar algo como método replaceAll de jQuery para sustituir la variable de plantilla con su contenido, pero no puedo encontrar la manera de hacer sin envolver todas las variables en un div.

Solo quiero hacer algo como $ ('document'). Gsub ("{{title}}", "Soy un título").

¿Alguien tiene alguna idea?

Gracias por su ayuda!

+0

¿Un motor de plantillas en jQuery? Eche un vistazo a http://api.jquery.com/jquery.tmpl/ –

Respuesta

5

Se puede acceder al HTML puro a través de innerHTML la propiedad de un elemento DOM, o el uso de la propiedad de jQuery html envolviéndolo, y luego realizar la sustitución:

var html = $(document).html(); 
$(document).html(html.replace('{{title}}', 'I am a title'); 

EDIT:

Como ha señalado Antti Haapala , reemplazar el documento completo HTML puede tener efectos colaterales que no desea tratar, como scripts que se vuelven a cargar. Por lo tanto, se debe profundizar en el elemento más específico posible DOM antes de realizar la sustitución, es decir .:

var element = $('#content'); 
var html = element.html(); 
element.html(html.replace('{{title}}', 'I am a title'); 
+0

Esto podría fallar gravemente con las secuencias de comandos;) –

+0

De hecho. Normalmente ubico un elemento específico y lo reemplazo solo por el contenido, dejando el resto del documento intacto. – gnab

3

Bueno, puede utilizar String.replace con una expresión regular, pero en realidad, lo que se puede utilizar es jQuery.

http://api.jquery.com/category/plugins/templates/

+0

Gracias Antti. Estos parecen ser una gran opción, pero mi caso de uso es bastante simple y solo necesito la opción de reemplazo simple que de alguna manera había logrado escapar de mí. – Nick

+1

Mientras que cuatro años después de esta respuesta, la opción de reemplazo de cadenas sigue siendo actual y viable, las plantillas de jQuery se han desaprobado y reemplazado con JsRender y JsViews. – haslo

1

Recientemente he usado Handlebars tomar un atributo de datos (plantilla) de una tabla e inyectar otro valor (ID del registro) de uno de sus filas:

// data-row-url="http://example.com/people/{{id}}" 

var table = $(this).closest('.data_grid table');       

if(table.attr('data-row-url')) {           
    var record_id = $(this).data('record-id')       
    var show_url_template = table.data('row-url');      
    var url_template = Handlebars.compile(show_url_template)    
    var url = url_template({ id: record_id });       
    $.getScript(url);             
} 

Para el contexto ejecuta este código desde dentro de un evento onclick para los elementos tr de la tabla y recupera el registro cliqueado mediante ajax.

30

Si otros buscaban a un equivalente a gsub en general, esto sólo se reemplaza el primer partido:

"aa".replace("a", "b") // "ba" 

//g sustituye a todos los partidos:

"aa".replace(/a/g, "b") // "bb" 
"aa".replace(new RegExp("a", "g"), "b"); // "bb" 
1

creo que podría ser una plantilla bigote . Es posible que desee comprobar bigote.js. Creo que podrías compilar eso para JS.

Cuestiones relacionadas