2012-02-04 38 views
5

CẬP NHẬT: Dường như hành vi cụ thể của trình duyệt như TimWolla đã nhận xét - tôi nên bình thường hóa như thế nào với phiên bản không thoát, đáng tin cậy theo cách thức trình duyệt chéo?Làm thế nào để ngăn chặn jQuery .html() thoát khỏi thuộc tính href tự động?

HTML:

<div id="test"><a href="#{one}">#{two}</a></div> 

JS:

$('#test').html() 
=> <a href="#%7Bone%7D">#{two}</a> 

Thông báo các #{one} trong href đang trốn thoát, trong khi #{two} thì không.

Có cách nào tốt hơn chỉ là unescape toàn bộ chuỗi không?

unescape($('#test').html()) 
=> <a href="#{one}">#{two}</a> 

Dưới đây là ví dụ: http://jsfiddle.net/kenn/n8veL/

+3

Dường như đó là sự cố dành riêng cho trình duyệt. Trong Googles v8 Engine nó hoạt động tốt. – TimWolla

+0

Neo đó dường như là một mẫu. Tại sao bạn phân tích cú pháp mẫu thành DOM? Mẫu phải được giữ trong mã nguồn (ví dụ: bên trong phần tử SCRIPT) và được xử lý bằng JavaScript (và chỉ * sau đó * được phân tích cú pháp bởi trình duyệt). –

+0

TimWolla: damn! đã cập nhật câu hỏi ... – kenn

Trả lời

0

Nếu bạn đang đi để được thực hiện một mở rộng thông qua JavaScript trên phần tử dù sao, bạn có thể đặt "href" mẫu trong một thuộc tính riêng biệt.

<a href='#dummy' data-href='#{template}'>Hi</a> 

Sau đó, chỉ cần mở rộng từ thuộc tính dữ liệu và thả kết quả vào "href" thực.

+1

Âm thanh như một ý tưởng tốt, nhưng tiếc là trong trường hợp của tôi nó không phải là tuyệt vời như cùng một mẫu được chia sẻ ở phía máy chủ cho một số trang tĩnh, và nhân bản hành vi js trong logic máy chủ có vẻ khó xử. – kenn

+0

Ah đúng, tôi hiểu. Vâng, có lẽ không có công việc tốt xung quanh thì khác với 'unescape()'. – Pointy

1

Trước hết, tôi nghi ngờ nếu có giải pháp đáng tin cậy cho câu hỏi của bạn. Lý do cơ bản là đơn giản: bởi vì Element.innerHTML làm việc bên dưới là không chuẩn và nó chỉ phụ thuộc vào việc thực hiện của trình duyệt.

Nếu bạn muốn có giải pháp đáng tin cậy, tôi khuyên bạn nên sử dụng các hoạt động DOM thay vì mẫu.

+0

Nhưng việc thoát chỉ được thực hiện trên thuộc tính "href". Các thuộc tính khác sẽ không bị ảnh hưởng theo cùng một cách. – Pointy

+0

@Pointy Tôi đặt cược một số trình duyệt (ví dụ như Firefox) thoát khỏi nó vì 'href' được cho là chứa URL. Vì vậy, các ký tự không được phép xuất hiện trong nó được thoát. Tuy nhiên, như tôi đã nói, đó là trình duyệt cụ thể và chúng tôi không có bất kỳ tiêu chuẩn nào để đảm bảo hành vi của nó. – shinkou

+0

Phải, nhưng không có trình duyệt nào tôi đã thử đã thoát khỏi thuộc tính "data-href". Nó không thực sự quan trọng nơi mà các mẫu được lưu giữ trên các yếu tố, sau khi tất cả. Tất nhiên sẽ luôn có vấn đề với các siêu ký tự HTML trong các giá trị thuộc tính, nhưng đối với các mẫu đơn giản, nó sẽ hoạt động. – Pointy

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