2011-10-01 29 views
30

thể trùng lặp:
Escaping text with jQuery append?Làm thế nào để bổ sung/thêm vào trước/tạo ra một nút văn bản với jQuery

HTML của tôi là một chút như thế này:

<div id="selector">Hello World</div> 

Bây giờ tôi d muốn nối thêm một số văn bản vào div này. Tôi biết rằng tôi chỉ có thể sử dụng

$('#selector').append(text); 

nhưng điều này sẽ không thoát bất kỳ ký tự đặc biệt nào trong số text. Một cách khác là bao bọc văn bản trong một khoảng thời gian:

$('#selector').append($('<span>').text(text)); 

Nhưng điều này là xấu, bởi vì nó tạo ra đánh dấu không cần thiết. Vì vậy, giải pháp hiện tại của tôi là để tự tạo một TextNode:

$('#selector').append(document.createTextNode(text)); 

tôi đã tự hỏi liệu có jQuery kiểu cách nào để làm điều này?

+0

Tôi đã cập nhật câu trả lời của mình. – Tebo

Trả lời

33

Cách tiếp cận createTextNode có lẽ là cách tốt nhất để thực hiện. Nếu bạn muốn có cú pháp jQuery-ish, bạn có thể tạo một plugin.

$.fn.appendText = function(text) { 
    return this.each(function() { 
     var textNode = document.createTextNode(text); 
     $(this).append(textNode); 
    }); 
}; 
+1

+1 Tất cả các phương pháp khác được cung cấp * ghi đè * nội dung hiện tại của phần tử vùng chứa, điều này có thể khiến trình nghe sự kiện và thuộc tính DOM biến mất/đặt lại. –

+0

@lonesomeday hehe đó là một plugin dễ sử dụng gọn gàng – Deeptechtons

-1

Bạn có thể sử dụng;

$.extend({ 
     urlEncode: function(value) { 
      var encodedValue = encodeURIComponent(value); 
      encodedValue = encodedValue.replace("+", "%2B"); 
      encodedValue = encodedValue.replace("/", "%2F"); 

      return encodedValue; 
     }, 
     urlDecode: function(value) { 
      var decodedValue = decodeURIComponent(value); 
      decodedValue = decodedValue.replace("%2B", "+"); 
      decodedValue = decodedValue.replace("%2F", "/"); 

      return decodedValue; 
     } 
}); 

để thoát các ký tự HTML trước khi bạn thêm vào DOM.

Sử dụng nó như; $.urlEncode(value)

Sử dụng; $('#selector').append($.urlEncode(text));

Update # 1

Bạn có thể này $('#selector').html($('#selector').html() + text);

Tôi nghi ngờ điều này là những gì bạn muốn.

+0

Công trình này, nhưng không phải là những gì tôi thực sự đang tìm kiếm: Nếu văn bản của tôi là 'Strong ', nó sẽ hiển thị chính xác điều này. Mã của bạn tạo: '% 3Cb% 3EHi% 3C% 2Fb% 3E' – Niko

+0

Tôi vừa đăng một bản cập nhật. – Tebo

+0

Cảm ơn bạn đã cập nhật, nhưng thực tế điều này cũng không hoạt động. Bây giờ nó sẽ hiển thị ** Strong ** nhưng tôi muốn hiển thị 'Strong '. – Niko

2

$.text() cũng chấp nhận chức năng làm tham số. Hàm này sẽ nhận chỉ mục và văn bản hiện tại. Giá trị trả về của hàm sẽ được đặt làm văn bản mới.

http://jsfiddle.net/4SvgV/1/

+0

Cảm ơn, đây là một ý tưởng hay. Nhưng tiếc là bất kỳ yếu tố nào bên trong thùng chứa đều bị ghi đè, hãy xem phần cập nhật: http://jsfiddle.net/4SvgV/2/ – Niko

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