How do you check if a selector matches something in jQuery?
本问题已经有最佳答案,请猛点这里访问。
在mootools中,我只运行
正如其他评论者所建议的,最有效的方法似乎是:
1 2 3 | if ($(selector).length ) { // Do something } |
如果您必须具有exists()函数(速度会变慢),则可以执行以下操作:
1 | jQuery.fn.exists = function(){return this.length>0;} |
然后在代码中可以使用
1 2 3 | if ($(selector).exists()) { // Do something } |
正如这里的回答
不,jquery总是返回jquery对象,不管选择器是否匹配。你需要使用。长度
1 2 3 | if ( $('#someDiv').length ){ } |
如果您使用:
1 2 | jQuery.fn.exists = function(){return ($(this).length > 0);} if ($(selector).exists()) { } |
您可能会暗示,如果不可能,则可以使用链。
这样会更好
1 2 | jQuery.exists = function(selector) {return ($(selector).length > 0);} if ($.exists(selector)) { } |
我想大多数在这里回复的人都不太明白这个问题,否则我可能会弄错。
问题是"如何检查jquery中是否存在选择器"。
大多数人认为这是"如何使用jquery检查DOM中是否存在元素",几乎不可互换。
jquery允许您创建自定义选择器,但请在这里查看在初始化e之前尝试在e上使用时会发生什么情况;
1 2 | $(':YEAH'); "Syntax error, unrecognized expression: YEAH" |
在遇到这个问题后,我意识到这只是一个简单的检查问题。
1 2 3 | if ($.expr[':']['YEAH']) { // Query for your :YEAH selector with ease of mind. } |
干杯。
另一种方式:
1 2 3 | $('#elem').each(function(){ // do stuff }); |
1 2 3 | if ($('#elem')[0]) { // do stuff } |
可选地:
1 | if( jQuery('#elem').get(0) ) {} |
1 2 3 4 5 6 | jQuery.fn.exists = function(selector, callback) { var $this = $(this); $this.each(function() { callback.call(this, ($(this).find(selector).length > 0)); }); }; |
我更喜欢
1 | if (jQuery("#anyElement").is("*")){...} |
它基本上检查这个元素是否是一种"*"(任何元素)。只是一个更清晰的语法,"is"在"if"中更有意义
对我来说,
1 | if ($("#elem").index() ! = -1) {} |
首先创建一个函数:
1 | $.fn.is_exists = function(){ return document.getElementById(selector) } |
然后
1 | if($(selector).is_exists()){ ... } |