2010-07-29 36 views
7

Trong mã của tôi, tôi có html sau được thêm vào Mục danh sách khi người dùng nhấp vào một phần tử cụ thể.jQuery: Phát hiện nếu phần tử tồn tại

<span class="greenCheckMark"></span> 

Sử dụng jQuery, làm cách nào để phát hiện nếu phần tử tồn tại và nếu có, không thêm dấu kiểm màu xanh lục khác?

$('.clickedElement').live('click',function(){ 
//does the green check mark exist? if so then do nothing, else 
$('#listItem).append('<span class="greenCheckMark"></span>'); 
}); 

Trả lời

12

Sử dụng nothas

$('#listItem:not(:has(.greenCheckMark))') 
    .append('<span class="greenCheckMark"></span>'); 
+0

+1 - Tôi thích cái này. Không cần thử nghiệm. – user113716

+1

Đồng ý. Không có ** nhìn thấy ** thử nghiệm cần thiết.Tôi tự hỏi làm thế nào hiệu suất so sánh với một bộ chọn phạm vi hoặc tìm kiếm (nhìn vào nguồn cố gắng để con số nó ra - http://code.jquery.com/jquery -1.4.2.js) –

0
$('.clickedElement').live('click',function(){ 
    //does the green check mark exist? if so then do nothing, else 
    if($("#listItem span.greenCheckMark").length != 0) 
    { 
     $('#listItem').append('<span class="greenCheckMark"></span>'); 
    } 
}); 

Được rồi, sau một vài chỉnh sửa, điều này sẽ là những gì bạn đang tìm kiếm.

$("#listItem span.greenCheckMark").length != 0 sẽ trả về một mảng đối tượng JQuery, nếu khu vực đó có độ dài không bằng 0 thì nó tồn tại. Hãy chắc chắn rằng bạn đang kiểm tra cụ thể cho nơi bạn muốn kiểm tra, ($("span.greenCheckMark").length sẽ kiểm tra toàn bộ tài liệu cho các dấu kiểm màu xanh lục).

+0

@EliThompson +1 Cảm ơn người đàn ông –

+0

@Eli, tại sao 'này'? - không phải là '$ ('# listItem'). tìm (...'? – James

+0

Có vẻ như tôi đã đọc sai câu hỏi, nhận xét đã xóa – EliThompson

1

Bạn chỉ có thể tìm kiếm nó?

($('.greenCheckMark', '#listItem').length > 0) ? /* found green check mark in #listItem */ : /* not found */ ; 

EDIT: Fixed 'un-gì liên quan' đặt câu hỏi.

+0

Eh, tại sao sử dụng toán tử điều kiện khi câu lệnh 'if' phù hợp hơn? – James

+1

@JP, điều đó hoàn toàn không quan trọng. Tuy nhiên, nếu bạn muốn một lý do, toán tử bậc ba cho phép tôi dễ dàng –

+0

Tôi không hiểu ý bạn là gì bởi "bản đồ" ...? Bạn không chỉ định giá trị trả lại của biểu thức cho bất cứ điều gì ... – James

0

Theo yêu cầu của bạn, điều này sẽ chỉ gắn <span> trong trường hợp đó #listItem không chứa một <span> với một class của greenCheckMark.

var listItem = $('#listItem'); 
if (!listItem.find('span.greenCheckMark')[0]) { 
    listItem.append('<span class="greenCheckMark"></span>'); 
} 
+1

JP -' .has() 'của jQuery sẽ luôn luôn Trả lời một đối tượng Tôi bị lẫn lộn về vấn đề này vì tên phương thức có vẻ như nó sẽ trả về 'boolean' – user113716

+0

@Patrick, cảm ơn vì đã nhắc tôi :-) .. Chỉ cần thay đổi nó – James

+0

JP +1 Tôi thích bản cập nhật của bạn. ít ký tự hơn 'độ dài'. – user113716

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