如何确定页面上是否存在某个元素...例如...
$('select[name="modifier_option"]')
如果这个选择框在屏幕上存在,我需要验证它的值是否大于0以确保它的值是正确的,但如果它不存在,我就不需要担心它。如何确定页面上是否存在某个元素...例如...
$('select[name="modifier_option"]')
如果这个选择框在屏幕上存在,我需要验证它的值是否大于0以确保它的值是正确的,但如果它不存在,我就不需要担心它。 if( $('select[name="modifier_option"]').length )
{
// it exists
}
从这里复制/粘贴:jQuery是否有"exists"函数?
jQuery没有内置的"exists"函数,但是可以使用以下代码来检查元素是否存在:if ($(selector).length) {
// do something
}
这个代码片段将返回一个代表元素存在与否的布尔值。如果元素存在,它将被解释为true,否则为false。
jQuery.fn.exists = function(){return jQuery(this).length>0;}
if ($(selector).exists()) {
// Do something
}
if ($(selector).length)
是更好的解决方案。 - Šime Vidas我曾经回答过这个问题,使用以下插件这里。请访问答案以获取有关创建插件的完整详细信息。
$('select[name="modifier_option"]').exist(function() {
if ($(this).val() > 0) {
/* DO WORK */
}
else {
/* is not greater than 0
DO OTHER 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') { // has at least one Callback Method
var exist = ele.length > 0 ? true : false; // strict setting of boolean
if (exist) { // Elements do 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 { // has NO callback method, thus return if exist or not based on element existant length
if (ele.length <= 1) return ele.length > 0 ? true : false; // strict return of boolean
else return ele.length; // return actual length for how many of this element exist
}
return false; // only hits if something errored!
}
});
$.fn.extend({
exist: function() {
var args = [$(this)];
if (arguments.length) for (x in arguments) args.push(arguments[x]);
return $.exist.apply($, args);
}
});
}
})(jQuery);
的意思是: 在这个网页里加入一个指向 jsFiddle 的链接。!!jQuery("selctor").length
更好吗?(直接使用此代码或将其作为.exists()的返回值) - nbar!!jQuery("selector").exist()
并简单地获得一个 BOOLEAN 返回值,或者,如果你选择使用第一个回调参数,那么你就可以保持 jQuery 的链式调用。因此,你可以继续对 现有的 元素进行调用。例如:$('selector').exist(function(){/*dowork*/}).css('color', 'red')
如果你想知道为什么我没有只让 .exist()
返回元素,那是因为这样做没有意义。如果你要以这种方式使用它来实现链式调用,那么你甚至不需要它。你可以直接进行调用。 - SpYk3HHif(!!jQuery("selector").length) { do1() } else do2() }
与$('selector').exist(do1(), do2()}
相比,我必须说我更喜欢前者,因为你直接可以看到发生了什么。此外,$('selector').exist().css("do", "something")
与$('selector').css("do", "something")
作用相同。而您的函数可以返回长度(int),而int没有.css()
函数。 - nbarif(jQuery("selector").exist()) { do1() } else do2() }
是可以的。这是我能想到的唯一情况。也许你可以给我展示更多例子? - nbar