Bạn có thể sử dụng instanceof
để kiểm tra xem các đối tượng thông qua tại là một instanceof jQuery
hoặc một instanceof HTMLElement
. Nếu nó là return true;
. Nếu không, return false
.
function isDomElem(obj) {
if(obj instanceof HTMLCollection && obj.length) {
for(var a = 0, len = obj.length; a < len; a++) {
if(!checkInstance(obj[a])) {
console.log(a);
return false;
}
}
return true;
} else {
return checkInstance(obj);
}
function checkInstance(elem) {
if((elem instanceof jQuery && elem.length) || elem instanceof HTMLElement) {
return true;
}
return false;
}
}
Tùy chọn, thay vì trả lại true
hoặc false
, quý vị có thể làm một số hành động khác. Bạn cũng có thể tách từng tùy chọn ra và thực hiện một hành động riêng biệt tùy thuộc vào đối tượng nào là đối tượng của jQuery
hoặc HTMLElement
. Bạn có rất nhiều lựa chọn để lựa chọn.
$(function() {
var temp1 = $('div'),
temp2 = $('div')[0],
temp3 = "foo",
temp4 = ['bar'],
temp5 = $('span'),
temp6 = document.getElementsByClassName("test");
alert(isDomElem(temp1));
alert(isDomElem(temp2));
alert(isDomElem(temp3));
alert(isDomElem(temp4));
alert(isDomElem(temp5));
alert(isDomElem(temp6));
function isDomElem(obj) {
if(obj instanceof HTMLCollection && obj.length) {
for(var a = 0, len = obj.length; a < len; a++) {
if(!checkInstance(obj[a])) {
return false;
}
}
return true;
} else {
return checkInstance(obj);
}
function checkInstance(elem) {
if((elem instanceof jQuery && elem.length) || elem instanceof HTMLElement) {
return true;
}
return false;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
<p class="test"></p>
<p class="test"></p>
EDIT:
@RickHitchcock làm một điểm rất có giá trị liên quan đến chức năng trở về một thể hiện của jQuery không có các yếu tố phù hợp. Vì lý do này, tôi đã cập nhật hàm để đưa vào tài khoản không chỉ khi đối tượng là một thể hiện của jQuery mà còn nếu đối tượng có độ dài, cho biết có tìm thấy phần tử DOM hay không.
EDIT:
An sửa thêm được thực hiện mỗi bình luận @AdamPietrasiak 's dưới đây trường hợp liên quan đến các HTMLCollections
trở sai. Trong trường hợp này, nếu obj
được truyền vào là một phiên bản của HTMLCollection
, mỗi phần tử được chuyển đến hàm nội bộ checkInstance
. Bất kỳ phần tử nào không phải là nút DOM sẽ kích hoạt chức năng để ném tổng thể false
bất kể có yếu tố trong danh sách hay không (tức là đối với các trường hợp HTMLCollection
chức năng coi đó là tất cả hoặc không có gì).
Một điều cần lưu ý là rằng 'instanceof' không hoạt động theo cách bạn muốn nếu đối tượng là từ tài liệu khác (ví dụ: từ khung nội tuyến hoặc cửa sổ khác). – jfriend00
Điều này trả về không đúng cho 'isDomElem ($ (" # không tồn tại-phần tử "))' –
@RickHitchcock Tên hàm có thể gây hiểu lầm nhưng nó trả về những gì OP yêu cầu. OP muốn hàm trả về true nếu biến đã cho là đối tượng jQuery hoặc DOM Element. Anh/Cô ấy không bao giờ được chỉ định nếu đối tượng jQuery biểu diễn một phần tử DOM rỗng. – War10ck