如何检查选择器是否与 jQuery 中的某些内容匹配?[复制]
-
08-07-2019 - |
题
这个问题在这里已经有答案了:
- jQuery 有“exists”函数吗? 40 个答案
在 Mootools 中,我只需运行 if ($('target')) { ... }
. 。做 if ($('#target')) { ... }
在 jQuery 中也以同样的方式工作吗?
解决方案
正如其他评论者建议的最有效的方法似乎是:
if ($(selector).length ) {
// Do something
}
如果你绝对必须有一个exists()函数——这会更慢——你可以这样做:
jQuery.fn.exists = function(){return this.length>0;}
然后在你的代码中你可以使用
if ($(selector).exists()) {
// Do something
}
正如所回答的 这里
其他提示
不,jquery 总是返回一个 jquery 对象,无论选择器是否匹配。你需要使用.length
if ( $('#someDiv').length ){
}
如果您使用:
jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }
你会暗示链接是可能的,但事实并非如此。
这样会更好
jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }
我想大部分在这里回答的人都不太明白这个问题,否则我可能会弄错。
问题是“如何检查是否 选择器 存在于 jQuery 中。”
大多数人认为这是“如何使用jQuery检查DOM中是否存在元素”。几乎不可互换。
jQuery 允许您创建自定义选择器,但是请参阅此处在初始化 e 之前尝试使用 e 时会发生什么情况;
$(':YEAH');
"Syntax error, unrecognized expression: YEAH"
遇到这个问题后,我意识到这只是一个检查问题
if ($.expr[':']['YEAH']) {
// Query for your :YEAH selector with ease of mind.
}
干杯。
还有另一种方式:
$('#elem').each(function(){
// do stuff
});
if ($('#elem')[0]) {
// do stuff
}
或者:
if( jQuery('#elem').get(0) ) {}
我更喜欢
if (jQuery("#anyElement").is("*")){...}
它基本上检查这个元素是否是一种“*”(任何元素)。只是一个更清晰的语法,“is”在“if”中更有意义
jQuery.fn.exists = function(selector, callback) {
var $this = $(this);
$this.each(function() {
callback.call(this, ($(this).find(selector).length > 0));
});
};
为我 .exists
不起作用,所以我使用索引:
if ($("#elem").index() ! = -1) {}
首先创建一个函数:
$.fn.is_exists = function(){ return document.getElementById(selector) }
然后
if($(selector).is_exists()){ ... }
不隶属于 StackOverflow