2011-07-15 6 views
11

Tôi biết bạn có thể kiểm tra xem phần tử có tồn tại với $('div').length không, nhưng khi phần tử bị hủy bằng cách sử dụng .remove(), .length vẫn báo cáo div tồn tại. Làm thế nào tôi có thể tìm thấy có hay không nó thực sự tồn tại?JQuery: Kiểm tra xem phần tử có tồn tại cùng với '.remove()'

if ($('div').length) { 
    alert('yes') 
} else { 
    alert('no') 
} 
+0

Err .. Không chắc chắn ý bạn là gì. Nếu bạn sử dụng '.remove()', phần tử được lấy ra khỏi DOM. Độ dài báo cáo kết quả mong đợi: http://jsfiddle.net/TmPBC/ –

+0

Điều đó sẽ cảnh báo có miễn là có một div trên trang. Bạn có thể sử dụng id để kiểm tra xem một phần tử chính xác đã bị xóa chưa. – Paulpro

+0

$ ('div') là một ví dụ. Tôi đã không thử nghiệm để xem có bất kỳ divs trong toàn bộ trang. – gavsiu

Trả lời

6

thử nghiệm cho dù đó có cha mẹ:

if ($element.parent().length) { alert('yes') } 
else { alert('no') } 

hoặc nếu bạn có một tham chiếu đến phần tử DOM:

if(element.parentNode) { 
    // yes 
} 

Rõ ràng, điều này chỉ làm cho các yếu tố bạn đã có một tham chiếu đến.

FWIW, bản thân phần tử vẫn tồn tại, nó không chỉ là một phần của cây DOM.

+0

Điều này sẽ không hoạt động nếu bất kỳ phần tử cha nào của '$ element' đã bị xóa khỏi DOM. Ví dụ: '$ element.parent(). Remove()'. '$ element.parent(). length' vẫn là 1, mặc dù' $ element' không nằm trong cây DOM. – gilly3

+0

@ gilly3: Vâng, tôi giả định rằng '.remove()' được thực hiện trên phần tử, như được đề cập trong câu hỏi. Dù sao, 1 của giải pháp của bạn, nhưng tôi nghĩ rằng nó là đủ để tìm 'cơ thể' thay vì' html'. –

6

Bởi tồn tại, bạn có nghĩa là bạn muốn xem nếu nó tồn tại trong dom? Kiểm tra xem "html" có phải là tổ tiên không:

var $myDiv = $(".myDiv"); 
$myDiv.closest("html").length; // returns 1 
$myDiv.remove(); 
$myDiv.closest("html").length; // returns 0 

Hoặc sử dụng .is("html *"). Nó trả về giá trị boolean, tiện dụng:

var $myDiv = $(".myDiv"); 
$myDiv.is("html *"); // returns true 
$myDiv.remove(); 
$myDiv.is("html *"); // returns false 
+0

Cái nào hiệu quả nhất về hiệu suất? Hmm. – jfroom

+0

Nếu có sự khác biệt nào cả, '.closest()' sẽ hiệu quả nhất. Tùy thuộc vào cách '.is()' được thực hiện, nó có thể gần như hiệu quả như '.closest()', hoặc nó có thể tồi tệ hơn nhiều. – gilly3

0

bạn có thể lấy phụ huynh của phần tử trước khi xóa phần tử và sau khi phần tử đã bị xóa, bạn có thể kiểm tra như thế này!

var parent = $(element).parent(); 
    $(element).remove(); 

    if(parent.children(element)) { alert('yes'); } 
    else { alert('no'); } 

tất nhiên yếu tố sẽ có một số jquery selector

4
if (!$foo.closest('html').length) { 
    //Element is detached 
} 

này sẽ vẫn làm việc nếu một trong cha mẹ của phần tử đã được gỡ bỏ (trong trường hợp các yếu tố bản thân vẫn sẽ có một mẹ).

Tôi trích dẫn this answer.