Jak*_*raw 2669 javascript jquery
如何在jQuery中检查元素的存在?
我当前的代码是这样的:
if ($(selector).length > 0) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
有更优雅的方式来解决这个问题吗?也许是插件或功能?
Tim*_*the 2392
在JavaScript中,一切都是'真实'或'虚假',而数字0
(和NaN)意味着false
,其他一切true
.所以你可以写:
if ($(selector).length)
Run Code Online (Sandbox Code Playgroud)
你不需要那个>0
部分.
Jak*_*raw 1338
是!
jQuery.fn.exists = function(){ return this.length > 0; }
if ($(selector).exists()) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
这是对Jeff Atwood的Herding Code播客的回应
Jon*_*son 365
如果你用过
jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }
Run Code Online (Sandbox Code Playgroud)
你会暗示链接是可能的,但事实并非如此.
这会更好:
jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }
Run Code Online (Sandbox Code Playgroud)
或者,从FAQ:
if ( $('#myDiv').length ) { /* Do something */ }
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下内容.如果jQuery对象数组中没有值,那么获取数组中的第一个项将返回undefined.
if ( $('#myDiv')[0] ) { /* Do something */ }
Run Code Online (Sandbox Code Playgroud)
小智 132
你可以用这个:
// if element exists
if($('selector').length){ /* do something */ }
Run Code Online (Sandbox Code Playgroud)
// if element does not exist
if(!$('selector').length){ /* do something */ }
Run Code Online (Sandbox Code Playgroud)
Mag*_*gne 96
检查存在的最快和最语义的自我解释方法实际上是使用plain JavaScript
:
if (document.getElementById('element_id')) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
写入比jQuery长度替换要长一些,但执行速度更快,因为它是本机JS方法.
它比编写自己的jQuery
函数更好.由于@snover的原因,这种替代方案较慢.但它也会给其他程序员一种印象,即exists()
函数是jQuery固有的东西.JavaScript
编辑代码的其他人应该/应该理解,而不会增加知识债务.
注意:注意之前缺少'#' element_id
(因为这是普通的JS,不是jQuery
).
Sal*_*n A 69
您可以通过编写来节省几个字节:
if ($(selector)[0]) { ... }
Run Code Online (Sandbox Code Playgroud)
这工作,因为每一个jQuery对象也伪装成一个数组,所以我们可以使用数组语法运营商从一开始的第一个项目阵列.undefined
如果指定索引处没有项目,则返回.
Dev*_*von 63
您可以使用:
if ($(selector).is('*')) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
一个小更优雅,也许.
SpY*_*3HH 63
此插件可以在if
类似if ($(ele).exist()) { /* DO WORK */ }
或使用回调的语句中使用.
;;(function($) {
if (!$.exist) {
$.extend({
exist: function() {
var ele, cbmExist, cbmNotExist;
if (arguments.length) {
for (x in arguments) {
switch (typeof arguments[x]) {
case 'function':
if (typeof cbmExist == "undefined") cbmExist = arguments[x];
else cbmNotExist = arguments[x];
break;
case 'object':
if (arguments[x] instanceof jQuery) ele = arguments[x];
else {
var obj = arguments[x];
for (y in obj) {
if (typeof obj[y] == 'function') {
if (typeof cbmExist == "undefined") cbmExist = obj[y];
else cbmNotExist = obj[y];
}
if (typeof obj[y] == 'object' && obj[y] instanceof jQuery) ele = obj[y];
if (typeof obj[y] == 'string') ele = $(obj[y]);
}
}
break;
case 'string':
ele = $(arguments[x]);
break;
}
}
}
if (typeof cbmExist == 'function') {
var exist = ele.length > 0 ? true : false;
if (exist) {
return ele.each(function(i) { cbmExist.apply(this, [exist, ele, i]); });
}
else if (typeof cbmNotExist == 'function') {
cbmNotExist.apply(ele, [exist, ele]);
return ele;
}
else {
if (ele.length <= 1) return ele.length > 0 ? true : false;
else return ele.length;
}
}
else {
if (ele.length <= 1) return ele.length > 0 ? true : false;
else return ele.length;
}
return false;
}
});
$.fn.extend({
exist: function() {
var args = [$(this)];
if (arguments.length) for (x in arguments) args.push(arguments[x]);
return $.exist.apply($, args);
}
});
}
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
您可以指定一个或两个回调.第一个将触发如果元素存在,如果元素没有第二人会火不存在.但是,如果您选择仅传递一个函数,则只会在元素存在时触发.因此,如果所选择的元素并链条会死不存在.当然,如果确实存在,第一个函数将触发,链将继续.
请记住,使用回调变量有助于保持可链接性 - 返回元素,您可以像使用任何其他jQuery方法一样继续链接命令!
if ($.exist('#eleID')) { /* DO WORK */ } // param as STRING
if ($.exist($('#eleID'))) { /* DO WORK */ } // param as jQuery OBJECT
if ($('#eleID').exist()) { /* DO WORK */ } // enduced on jQuery OBJECT
$.exist('#eleID', function() { // param is STRING && CALLBACK METHOD
/* DO WORK */
/* This will ONLY fire if the element EXIST */
}, function() { // param is STRING && CALLBACK METHOD
/* DO WORK */
/* This will ONLY fire if the element DOES NOT EXIST */
})
$('#eleID').exist(function() { // enduced on jQuery OBJECT with CALLBACK METHOD
/* DO WORK */
/* This will ONLY fire if the element EXIST */
})
$.exist({ // param is OBJECT containing 2 key|value pairs: element = STRING, callback = METHOD
element: '#eleID',
callback: function() {
/* DO WORK */
/* This will ONLY fire if the element EXIST */
}
})
Run Code Online (Sandbox Code Playgroud)
Ali*_*eza 57
我看到大部分的答案在这里是不准确的,因为他们应该是,他们检查元素长度,也可以是确定在许多情况下,但不是100%,想象一下,如果数传给而不是函数,所以我原型机检查所有功能条件并返回应该是的答案:
$.fn.exists = $.fn.exists || function() {
return !!(this.length && (this[0] instanceof HTMLDocument || this[0] instanceof HTMLElement));
}
Run Code Online (Sandbox Code Playgroud)
这将检查长度和类型,现在您可以这样检查:
$(1980).exists(); //return false
$([1,2,3]).exists(); //return false
$({name: 'stackoverflow', url: 'http://www.stackoverflow.com'}).exists(); //return false
$([{nodeName: 'foo'}]).exists() // returns false
$('div').exists(); //return true
$('.header').exists(); //return true
$(document).exists(); //return true
$('body').exists(); //return true
Run Code Online (Sandbox Code Playgroud)
amy*_*ini 55
真的不需要jQuery.使用纯JavaScript,检查以下内容更容易,语义更正确:
if(document.getElementById("myElement")) {
//Do something...
}
Run Code Online (Sandbox Code Playgroud)
如果由于任何原因您不想将id放入元素,您仍然可以使用任何其他用于访问DOM的JavaScript方法.
jQuery非常酷,但不要让纯粹的JavaScript被遗忘......
Ami*_*bha 53
你可以用这个:
jQuery.fn.extend({
exists: function() { return this.length }
});
if($(selector).exists()){/*do something*/}
Run Code Online (Sandbox Code Playgroud)
tec*_*rus 42
所有以前的答案都需要.length
参数的原因是它们主要使用jquery的$()
选择器,它在幕后有querySelectorAll(或者它们直接使用它).这个方法相当慢,因为它需要解析整个DOM树,寻找与该选择器的所有匹配并用它们填充数组.
['length']参数不是必需的或有用的,如果直接使用代码将会快得多document.querySelector(selector)
,因为它返回匹配的第一个元素,如果没有找到则返回null.
function elementIfExists(selector){ //named this way on purpose, see below
return document.querySelector(selector);
}
/* usage: */
var myelement = elementIfExists("#myid") || myfallbackelement;
Run Code Online (Sandbox Code Playgroud)
然而,这种方法让我们返回实际的对象; 如果它不会被保存为变量并重复使用,那么这是很好的(如果我们忘记的话,保持参考).
var myel=elementIfExists("#myid");
// now we are using a reference to the element which will linger after removal
myel.getParentNode.removeChild(myel);
console.log(elementIfExists("#myid")); /* null */
console.log(myel); /* giant table lingering around detached from document */
myel=null; /* now it can be garbage collected */
Run Code Online (Sandbox Code Playgroud)
在某些情况下,这可能是期望的.它可以在这样的for循环中使用:
/* locally scoped myel gets garbage collected even with the break; */
for (var myel; myel = elementIfExist(sel); myel.getParentNode.removeChild(myel))
if (myel == myblacklistedel) break;
Run Code Online (Sandbox Code Playgroud)
如果你实际上并不需要这个元素并想要获得/存储一个真/假,那就加倍吧!它适用于解开的鞋子,为什么要在这里打结?
function elementExists(selector){
return !!document.querySelector(selector);
}
/* usage: */
var hastables = elementExists("table"); /* will be true or false */
if (hastables){
/* insert css style sheet for our pretty tables */
}
setTimeOut(function (){if (hastables && !elementExists("#mytablecss"))
alert("bad table layouts");},3000);
Run Code Online (Sandbox Code Playgroud)
hiw*_*way 39
$.contains()
你想要的是什么?
jQuery.contains( container, contained )
$.contains()
如果第二个参数提供的DOM元素是第一个参数提供的DOM元素的后代,则该方法返回true,无论它是直接子节点还是嵌套更深.否则,它返回false.仅支持元素节点; 如果第二个参数是文本或注释节点,$.contains()
则返回false.注意:第一个参数必须是DOM元素,而不是jQuery对象或纯JavaScript对象.
Ole*_*leg 38
我发现if ($(selector).length) {}
不够.当它selector
是一个空对象时,它会默默地破坏你的应用程序{}
.
var $target = $({});
console.log($target, $target.length);
// Console output:
// -------------------------------------
// [? Object ] 1
// ? __proto__: Object
Run Code Online (Sandbox Code Playgroud)
我唯一的建议是进行额外的检查{}
.
if ($.isEmptyObject(selector) || !$(selector).length) {
throw new Error('Unable to work with the given selector.');
}
Run Code Online (Sandbox Code Playgroud)
我仍在寻找更好的解决方案,因为这个有点重.
编辑:警告!当selector
字符串时,这在IE中不起作用.
$.isEmptyObject('hello') // FALSE in Chrome and TRUE in IE
Run Code Online (Sandbox Code Playgroud)
Anu*_*kar 36
您可以使用java脚本中的长度来检查元素是否存在.如果length大于零,则如果length为零则存在元素,则元素不存在
// These by Id
if( $('#elementid').length > 0){
// Element is Present
}else{
// Element is not Present
}
// These by Class
if( $('.elementClass').length > 0){
// Element is Present
}else{
// Element is not Present
}
Run Code Online (Sandbox Code Playgroud)
Til*_*ddy 32
使用选择器返回的jQuery集合的.length属性:
Run Code Online (Sandbox Code Playgroud)if ($("#myDiv").length) { $("#myDiv").show(); }
请注意,并不总是需要测试元素是否存在.以下代码将显示该元素是否存在,如果不存在则不执行任何操作(没有错误):
Run Code Online (Sandbox Code Playgroud)$("#myDiv").show();
San*_*dez 30
这与所有答案非常相似,但为什么不使用!
运算符两次,这样你就可以得到一个布尔值:
jQuery.fn.exists = function(){return !!this.length};
if ($(selector).exists()) {
// the element exists, now what?...
}
Run Code Online (Sandbox Code Playgroud)
SJG*_*SJG 28
$(selector).length && //Do something
Run Code Online (Sandbox Code Playgroud)
Oli*_*ver 26
受到hiway回答的启发,我提出了以下建议:
$.fn.exists = function() {
return $.contains( document.documentElement, this[0] );
}
Run Code Online (Sandbox Code Playgroud)
jQuery.contains接受两个DOM元素并检查第一个元素是否包含第二个元素.
当我们想要仅仅应用它来检查当前文档中元素的存在时,使用document.documentElement
第一个参数来实现exists
方法的语义.
下面,我已经放在一起进行比较的一个片段jQuery.exists()
反对$(sel)[0]
和$(sel).length
接近,两者均返回truthy
的值$(4)
,而$(4).exists()
回报false
.在检查 DOM中元素是否存在的上下文中,这似乎是期望的结果.
$.fn.exists = function() {
return $.contains(document.documentElement, this[0]);
}
var testFuncs = [
function(jq) { return !!jq[0]; },
function(jq) { return !!jq.length; },
function(jq) { return jq.exists(); },
];
var inputs = [
["$()",$()],
["$(4)",$(4)],
["$('#idoexist')",$('#idoexist')],
["$('#idontexist')",$('#idontexist')]
];
for( var i = 0, l = inputs.length, tr, input; i < l; i++ ) {
input = inputs[i][1];
tr = "<tr><td>" + inputs[i][0] + "</td><td>"
+ testFuncs[0](input) + "</td><td>"
+ testFuncs[1](input) + "</td><td>"
+ testFuncs[2](input) + "</td></tr>";
$("table").append(tr);
}
Run Code Online (Sandbox Code Playgroud)
td { border: 1px solid black }
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="idoexist">#idoexist</div>
<table style>
<tr>
<td>Input</td><td>!!$(sel)[0]</td><td>!!$(sel).length</td><td>$(sel).exists()</td>
</tr>
</table>
<script>
$.fn.exists = function() {
return $.contains(document.documentElement, this[0]);
}
</script>
Run Code Online (Sandbox Code Playgroud)
小智 25
我只想使用普通的香草javascript来做到这一点.
function isExists(selector){
return document.querySelectorAll(selector).length>0;
}
Run Code Online (Sandbox Code Playgroud)
Paw*_*wel 24
不需要jQuery
if(document.querySelector('.a-class')) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
Ete*_*al1 23
我偶然发现了这个问题,我想分享一下我目前使用的代码片段:
$.fn.exists = function(callback) {
var self = this;
var wrapper = (function(){
function notExists () {}
notExists.prototype.otherwise = function(fallback){
if (!self.length) {
fallback.call();
}
};
return new notExists;
})();
if(self.length) {
callback.call();
}
return wrapper;
}
Run Code Online (Sandbox Code Playgroud)
现在我可以写这样的代码 -
$("#elem").exists(function(){
alert ("it exists");
}).otherwise(function(){
alert ("it doesn't exist");
});
Run Code Online (Sandbox Code Playgroud)
它可能看起来很多代码,但是当用CoffeeScript编写它时它很小:
$.fn.exists = (callback) ->
exists = @length
callback.call() if exists
new class
otherwise: (fallback) ->
fallback.call() if not exists
Run Code Online (Sandbox Code Playgroud)
jcr*_*898 19
我有一个案例,我想看看一个对象是否存在于另一个内部,所以我在第一个答案中添加了一些内容来检查选择器内的选择器.
// Checks if an object exists.
// Usage:
//
// $(selector).exists()
//
// Or:
//
// $(selector).exists(anotherSelector);
jQuery.fn.exists = function(selector) {
return selector ? this.find(selector).length : this.length;
};
Run Code Online (Sandbox Code Playgroud)
GST*_*TAR 18
怎么样:
function exists(selector) {
return $(selector).length;
}
if (exists(selector)) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
它非常小,可以节省您$()
每次都必须包含选择器.
and*_*314 15
我正在使用这个:
$.fn.ifExists = function(fn) {
if (this.length) {
$(fn(this));
}
};
$("#element").ifExists(
function($this){
$this.addClass('someClass').animate({marginTop:20},function(){alert('ok')});
}
);
Run Code Online (Sandbox Code Playgroud)
仅当存在jQuery元素时才执行链 - http://jsfiddle.net/andres_314/vbNM3/2/
duc*_*dhm 14
这是我exist
在jQuery中最喜欢的方法
$.fn.exist = function(callback) {
return $(this).each(function () {
var target = $(this);
if (this.length > 0 && typeof callback === 'function') {
callback.call(target);
}
});
};
Run Code Online (Sandbox Code Playgroud)
和其他版本,当选择器不存在时支持回调
$.fn.exist = function(onExist, onNotExist) {
return $(this).each(function() {
var target = $(this);
if (this.length > 0) {
if (typeof onExist === 'function') {
onExist.call(target);
}
} else {
if (typeof onNotExist === 'function') {
onNotExist.call(target);
}
}
});
};
Run Code Online (Sandbox Code Playgroud)
例:
$('#foo .bar').exist(
function () {
// Stuff when '#foo .bar' exists
},
function () {
// Stuff when '#foo .bar' does not exist
}
);
Run Code Online (Sandbox Code Playgroud)
Kam*_*cek 14
$("selector"
)返回一个具有该length
属性的对象.如果选择器找到任何元素,它们将包含在对象中.因此,如果检查其长度,您可以查看是否存在任何元素.在JavaScript中0 == false
,所以如果你没有得到0
你的代码就会运行.
if($("selector").length){
//code in the case
}
Run Code Online (Sandbox Code Playgroud)
abh*_*006 11
下面是不同情况的完整示例以及检查元素是否存在的方法如果使用direct on jQuery选择器可能会或可能不会工作,因为它返回数组或元素.
var a = null;
var b = []
var c = undefined ;
if(a) { console.log(" a exist")} else { console.log("a doesn't exit")}
// output: a doesn't exit
if(b) { console.log(" b exist")} else { console.log("b doesn't exit")}
// output: b exist
if(c) { console.log(" c exist")} else { console.log("c doesn't exit")}
// output: c doesn't exit
Run Code Online (Sandbox Code Playgroud)
最终解决方案
if($("#xysyxxs").length){ console.log("xusyxxs exist")} else { console.log("xusyxxs doesnn't exist") }
//output : xusyxxs doesnn't exist
if($(".xysyxxs").length){ console.log("xusyxxs exist")} else { console.log("xusyxxs doesnn't exist") }
//output : xusyxxs doesnn't exist
Run Code Online (Sandbox Code Playgroud)
And*_*rut 11
您不必检查它是否大于0
喜欢$(selector).length > 0
,$(selector).length
这是不够的和优雅的方式来检查元素的存在.如果你想做更多额外的事情,我认为仅仅为此编写一个函数是值得的,是的.
if($(selector).length){
// true if length is not 0
} else {
// false if length is 0
}
Run Code Online (Sandbox Code Playgroud)
小智 10
if ( $('#myDiv').size() > 0 ) { //do something }
Run Code Online (Sandbox Code Playgroud)
size()
计算选择器返回的元素数
Sun*_*mar 10
是这样做的最佳方法:
通过JQuery
:
if($("selector").length){
//code in the case
}
Run Code Online (Sandbox Code Playgroud)
selector
可以是Element
ID
ORElement
Class
要么
如果您不想使用jQuery
Library,则可以使用Core实现此目的JavaScript
:
通过JavaScript
:
if(document.getElementById("ElementID")) {
//Do something...
}
Run Code Online (Sandbox Code Playgroud)
试试这个.
简单,简洁,可在整个项目中使用:
jQuery.fn.exists=function(){return !!this[0];}; //jQuery Plugin
Run Code Online (Sandbox Code Playgroud)
用法:
console.log($("element-selector").exists());
Run Code Online (Sandbox Code Playgroud)
_________________________________
或者甚至是SHORTER :( 当你不想定义一个jQuery插件时):
if(!!$("elem-selector")[0]) ...;
Run Code Online (Sandbox Code Playgroud)
甚至
if($("elem-selector")[0]) ...;
Run Code Online (Sandbox Code Playgroud)
只需检查选择器的长度,如果它大于 0,则返回 true,否则返回 false。
身份证:
if( $('#selector').length ) // use this if you are using id to check
{
// it exists
}
Run Code Online (Sandbox Code Playgroud)
上课:
if( $('.selector').length ) // use this if you are using class to check
{
// it exists
}
Run Code Online (Sandbox Code Playgroud)
对于下拉:
if( $('#selector option').size() ) { // use this if you are using dropdown size to check
// it exists
}
Run Code Online (Sandbox Code Playgroud)
小智 5
一个简单的实用程序函数,用于id和class选择器。
function exist(IdOrClassName, IsId) {
var elementExit = false;
if (IsId) {
elementExit= $("#" + "" + IdOrClassName + "").length ? true : false;
}
else {
elementExit = $("." + "" + IdOrClassName + "").length ? true : false;
}
return elementExit;
}
Run Code Online (Sandbox Code Playgroud)
像下面这样调用此函数
$(document).ready(function () {
$("#btnCheck").click(function () {
//address is the id so IsId is true. if address is class then need to set IsId false
if (exist("address", true)) {
alert("exist");
}
else {
alert("not exist");
}
});
});
Run Code Online (Sandbox Code Playgroud)
所有的答案是不工作的防弹检查jQuery中的元素的存在。经过多年的编码,只有这个解决方案不会抛出任何关于存在与否的警告:
if($(selector).get(0)) { // Do stuff }
Run Code Online (Sandbox Code Playgroud)
或者在你的函数开始时保释:
if(!$(selector).get(0)) return;
Run Code Online (Sandbox Code Playgroud)
解释
在这种情况下,您不必处理零 | 空长度问题。这会强制获取一个元素,而不是计算它们。
我正在使用这个:
if($("#element").length > 0){
//the element exists in the page, you can do the rest....
}
Run Code Online (Sandbox Code Playgroud)
查找元素非常简单和容易。