2011-10-31 27 views
19

Có cách nào để làm một cái gì đó tương tự như gsub ruby ​​trong javascript? Tôi có một tệp html cục bộ mà tôi muốn xử lý và thay thế các biến mẫu nhất định bằng nội dung nhưng tôi không thể tìm ra cách thay thế các biến mẫu với nội dung mới. Html chứa mảnh như dưới đây:Có điều gì tương tự với gsub tồn tại trong javascript không?

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

Bây giờ nếu tôi quấn mỗi mẫu biến trong một div tên sau đó tôi có thể sử dụng một cái gì đó giống như phương pháp replaceAll jquery để thay thế các biến mẫu với nội dung của nó nhưng tôi không thể tìm ra cách để làm nó mà không bao gồm mọi biến trong div.

Tôi chỉ muốn làm điều gì đó như $ ('tài liệu'). Gsub ("{{title}}", "Tôi là một tiêu đề").

Bất kỳ ai có ý tưởng nào?

Cảm ơn sự giúp đỡ của bạn!

+0

Một công cụ tạo khuôn mẫu trong jQuery? Hãy xem http://api.jquery.com/jquery.tmpl/ –

Trả lời

5

Bạn có thể truy cập vào mã HTML thô thông qua sở hữu innerHTML một yếu tố của DOM, hoặc sử dụng tài sản html JQuery gói nó, và sau đó thực hiện việc thay thế:

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

EDIT:

Như đã chỉ ra bởi Antti Haapala , thay thế toàn bộ HTML tài liệu có thể có các tác dụng phụ mà bạn không muốn xử lý, như các tập lệnh được tải lại. Vì vậy, bạn nên đi sâu vào các yếu tố cụ thể nhất DOM có thể trước khi thực hiện việc thay thế, tức là .:

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

Điều này có thể không thành công với các tập lệnh;) –

+0

Thật vậy. Tôi thường định vị một phần tử cụ thể và chỉ thay thế nội dung của nó, để phần còn lại của tài liệu không bị ảnh hưởng. – gnab

3

Vâng, bạn có thể sử dụng string.Replace với một regex, nhưng thực sự, những gì bạn có thể sử dụng là jQuery Templates.

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

+0

Cảm ơn Antti. Đây trông giống như một lựa chọn tuyệt vời nhưng trường hợp sử dụng của tôi khá đơn giản và chỉ cần tùy chọn thay thế đơn giản mà bằng cách nào đó đã quản lý để thoát khỏi tôi. – Nick

+1

Trong bốn năm sau khi trả lời này, chuỗi thay thế tùy chọn vẫn là hiện tại và khả thi, jQuery Templates trong khi đó đã không được chấp nhận và thay thế bằng JsRender và JsViews. – haslo

1

Gần đây tôi sử dụng Handlebars để có một thuộc tính dữ liệu (template) từ một bảng và tiêm giá trị khác (ghi id) từ một trong hàng của nó:

// 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);             
} 

Đối với bối cảnh mã này chạy từ bên trong một sự kiện onclick cho các phần tử của bảng và tìm nạp bản ghi được nhấp qua ajax.

30

Nếu những người khác đang tìm kiếm một tương đương với Gsub nói chung, điều này chỉ thay thế các trận đấu đầu tiên:

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

//g thay thế tất cả các trận đấu:

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

Tôi tin rằng có thể là một mẫu ria mép . Bạn có thể muốn kiểm tra mustache.js. Tôi nghĩ bạn có thể biên dịch nó thành JS.

Các vấn đề liên quan