2010-02-28 51 views
26

好了,所以基本上我需要檢查,是否在我的菜單#Container存在任何的第三等級要素(h3是精確的),如果是給他們一些屬性的檢查存在。如果不將該屬性賦予始終存在的第二級元素(h2)。是:的jQuery - 元素

if ($('h3')) { 
    //some attribute 
} else { 
//some attribute 
}; 

正確的方法?

回答

45

用於這一用途。長度,它的0/false,如果沒有任何比賽:

if ($('h3').length) { 
//some attribute 
} else { 
//some attribute 
}; 

短版,不易閱讀:

$($('h3').length ? 'h3' : 'h2').addClass("bob"); 
1

檢查返回的jQuery對象的長度

if ($('h3').length != 0)) { 
    $('h3').attr(...); 
} 
else { 
    $('h2').attr(...); 
} 
3

.....

if ($('#Container h3').length) { 
    //some attribute 
} else { 
//some attribute 
}; 
1

爲了使其更具可讀性,我提供了這樣的修改:

var h3ElementsExist = $('h3').length 
if (h3ElementsExist) { 
    //some attribute 
} else { 
//some attribute 
}; 
1

我才意識到一個答案我張貼此功能的簡單的方法來添加一個jQuery插件這是以前刪除的很長一段時間。爲什麼?我不知道。當你考慮的根本缺陷

總之,ele.length很簡單,但沒有真正優雅。它不會保留可能會損害可讀性的jQuery樣式標記,也可能會在「if」語句中強制執行此操作,當它真正「出現」時,就像jQuery應該「自然」處理的內容。因此它確實如此。如果你所做的一切都是爲了將​​一個「屬性」應用於一個存在的元素,你可以簡單地進行調用,而不用if語句。如果該元素存在,它將獲得新的屬性。如果它不存在,它不會傷害任何東西或做任何事情,除非繼續。

例如:

$('#Container h3').css('background', 'red'); 

這將使id'd爲Containerred背景下,如果它們存在的元素內的任何現有H3標籤。如果它們不存在,則本質上,該代碼將被忽略。但是,如果你想做更多的事情,並保持jQuery「鏈接性」以及維護jQuery風格標記,那麼我會建議一個我寫的插件,它爲jQuery添加了$.exist()

它允許多種方式與回調參數,以及調用。簡而言之,您可以在if語句中使用它,例如if ($('h3').exist() {,或者您可以創建1到2個回調方法。回調方法純粹而簡單。如果只提供1個(或者簡單地第一個回叫方法),則它是「回叫方法」的「存在」。換句話說,如果元素存在,它會火,然後返回元素(一個或多個),從而保持jQuery的「chainability」。但是,如果不存在的話,什麼都不會發生,除非設有第二回調方法。然後它會激發你的第二個回調方法,就像上述if語句的「else」一樣。

這裏的一些例子:

$('#Container h3').exist(function(boolTrue, elements, indexPerEach) { /* DO WORK */ }); 
與2個回調

$('#Container h3').exist(function(boolTrue, elements, indexPerEach) { /* DO WORK */ }, 
function(boolFalse, elements) { /* Elements did NOT EXIST - DO WORK */ }); 

查看更多例子,讓插件縮小的版本HERE

/*---PULIGIN---*/ 
;;(function($){$.exist||($.extend({exist:function(){var a,c,d;if(arguments.length)for(x in arguments)switch(typeof arguments[x]){case "function":"undefined"==typeof c?c=arguments[x]:d=arguments[x];break;case "object":if(arguments[x]instanceof jQuery)a=arguments[x];else{var b=arguments[x];for(y in b)"function"==typeof b[y]&&("undefined"==typeof c?c=b[y]:d=b[y]),"object"==typeof b[y]&&b[y]instanceof jQuery&&(a=b[y]),"string"==typeof b[y]&&(a=$(b[y]))}break;case "string":a=$(arguments[x])}if("function"==typeof c){var e=0<a.length?!0:!1;if(e)return a.each(function(b){c.apply(this,[e,a,b])});if("function"==typeof d)return d.apply(a,[e,a]),a}return 1>=a.length?0<a.length?!0:!1:a.length}}),$.fn.extend({exist:function(){var a=[$(this)];if(arguments.length)for(x in arguments)a.push(arguments[x]);return $.exist.apply($,a)}}))})(jQuery); 
/*---PULIGIN---*/ 

查看更多信息張貼關於它的另一個答案HERE

0

檢查返回jQuery對象的大小或長度

if ($('h3').size() != 0)) { 
    $('h3').attr(...); 
} 
else { 
    $('h2').attr(...); 
} 

if ($('h3').length != 0)) { 
    $('h3').attr(...); 
} 
else { 
    $('h2').attr(...); 
}