Tôi đã chạy đầu vào một bức tường cố gắng tìm ra điều này. Lấy body HTML sau:Tại sao jQuery không ẩn một số HTML nhất định?
<body>
<div id="project">
<h1>Hi</h1>
<h2>Hello</h2>
</div>
</body>
Và mã jQuery sau:
$(function(){
var h = $('#project').html();
$('#project').remove();
$(h).hide().appendTo('body');
alert("Created HTML, hide, and appended!");
});
Phần $(h).hide()
gây jQuery để ném một ngoại lệ trong Safari 4 và Firefox 3.5.
Safari:TypeError: Result of expression 'this[a].style' [undefined] is not an object.
Firefox:uncaught exception: [Exception... "Could not convert JavaScript argument arg 0" nsresult: ...]
Khi tôi thay đổi HTML để chỉ chứa một trong hai tiêu đề (nếu bạn loại bỏ các <h1>
hoặc <h2>
từ HTML, kịch bản chạy thành công. Tại sao điều này?
Để tự mình thử nghiệm, hãy xem http://jsbin.com/avisi/edit
Chỉnh sửa: Tôi không thực sự cố gắng loại bỏ và phần tử từ DOM và chèn lại nó bằng cách sao chép HTML. Đây chỉ là một trường hợp thử nghiệm cho một lỗi tôi đang gặp phải trong mã phức tạp hơn, và tôi đang cố gắng hiểu tại sao lỗi này xảy ra. Tôi đồng ý rằng, nếu tôi muốn hoàn thành những gì được hiển thị ở đây, tôi sẽ sử dụng một số thứ như $('#project').remove().children().appendTo('body')
Tôi đồng ý rằng đây là cách dọn dẹp và chèn lại các nút được đề cập rõ ràng hơn nhiều. Những gì tôi đang cố gắng để hiểu là lý do tại sao (ít nhất là trong bản sao của tôi của Firefox 3.5 và Safari 4), mã trên gây ra lỗi. – Ryan
Tôi đã tìm ra nguyên nhân và đã cập nhật câu trả lời của mình. –
Justin, cảm ơn vì đã điều tra điều này. Tôi chắc rằng tôi có thể sử dụng điều này để giải quyết vấn đề ban đầu của tôi, cố gắng ẩn và chèn một đoạn HTML nhận được từ máy chủ (đó là lý do tại sao '.remove()' ... '.append()' không phải là một tùy chọn - không có gì để xóa). – Ryan