Giả sử tôi có yêu cầu sau: Thêm phần tử e
vào phần tử có id "x"
nếu phần tử như vậy tồn tại, nếu không hãy thêm e
vào phần thân.Có cách nào thanh lịch để chọn một phần tử trong JQuery nếu một phần tử không tồn tại?
Trong DOM mức 0, tôi có thể viết:
var parent = document.getElementById("x") || document.body;
parent.appendChild(e);
Trong jQuery, sau đây không không công việc:
var parent = $("#x") || $("body");
parent.append(e);
bởi vì nếu không có yếu tố với id x
tồn tại, là người đầu tiên bậc hở trả về đối tượng jquery rỗng, với sự thật, không phải là giả, vì vậy, append
không làm gì cả. Tôi thể, tuy nhiên, hãy viết:
var parent = $("#x")[0] || $("body")[0];
parent.appendChild(e);
nhưng giải pháp này là hơi phiền phức vì lập chỉ mục đối tượng jQuery được tôi trở lại HTMLElements, vì vậy tôi phải sử dụng appendChild
thay vì append
. Trong khi điều này làm việc, tôi tự hỏi liệu sự pha trộn của các cấp là thích hợp hoặc chỉ định của thiết kế xấu.
Có cách nào để sử dụng first()
không? Có lẽ tôi có thể tạo một đối tượng jQuery mà về cơ bản là một mảng có phần tử đầu tiên là div có id x và phần tử thứ hai là phần thân. Tôi biết tôi có thể làm điều này với các hình thức xây dựng jQuery mà mất một mảng phần tử, nhưng sau đó tôi trở lại với một pha trộn các cấp. Tôi cũng biết cách kiểm tra sự tồn tại của một phần tử có id x ($("#x").length
), nhưng tôi không thể thấy cách này sẽ dẫn đến một cách thanh lịch cho cụm từ "phần tử có id x nếu nó tồn tại, khác với phần thân."
Công thức như vậy có tồn tại không?
Ooh, điều này là khá, mặc dù - trừ khi jQuery làm việc một số phép thuật thực sự nghiêm trọng ở đây - nó có nhược điểm hiệu suất của việc lựa chọn * tất cả * các yếu tố trước khi trở về đầu tiên thay vì ngắn mạch. Tuy nhiên, nếu chúng ta quan tâm đến mức độ hiệu suất đó, chúng ta thực sự không nên sử dụng jQuery ngay từ đầu. – Matchu
Không, điều này sẽ không hoạt động vì ["Thứ tự của các phần tử DOM trong đối tượng jQuery được trả về có thể không giống nhau, vì chúng sẽ theo thứ tự tài liệu."] (Http://api.jquery.com/multiple- bộ chọn /), ví dụ: http://jsfiddle.net/ambiguous/edYY6/. Điều này sẽ cung cấp cho bạn '
' mọi lúc. –Đồng ý rằng điều này là rất tốt đẹp. Chúng tôi không sao với một trong số chúng mặc dù (hoặc phải là), bởi vì cái đầu tiên có một id, nên là duy nhất trên trang, và thứ hai là ** phần tử body **. Chỉ nên có một trong số này trong HTML. –