2015-11-26 58 views
0

我不得不從jQuery選擇獲取屬性:避免錯誤類型選擇

var id=$("#nav-titles li.active a").attr("href").replace(/^#/,""); 

如果沒有從jQuery選擇JS紀錄項目這個錯誤:

TypeError: $(...).attr(...) is undefined 

如何避免此錯誤並存儲「未定義」(或false或null)的id變量?


我知道我可以做到這一點:

var id=$("#nav-titles li.active a").length && $("#nav-titles li.active a").attr("href")?$("#nav-titles li.active a").attr("href").replace(/^#/,""):null; 

但確有必要使用3只選擇一個如此簡單的要求嗎?

回答

1

有沒有必要檢查收集的length。當.attr返回undefined值時,該集合爲空。以下片段使用||運算符。當attr返回一個虛假值時,將傳遞一個空字符串。

var id = ($("#nav-titles li.active a").attr("href") || '').replace(/^#/,"") || null; 
0

聽起來像是你要爲您找到每個元素做到這一點:

var id=$("#nav-titles li.active a").each(function() 
{ 
    $(this).attr("href").replace(/^#/,""); 
}); 
2

如果你不能確定,如果錨標記存在,這將是更可讀

var $anchor = $('#nav-titles li.active a'); 
if($anchor.length > 0 && $anchor.attr('href')){ 
    id= $anchor.attr("href").replace(/^#/,""); 
} 
+0

'$ anchor.attr( 'href' 屬性)length'沒有必要 - _replace_在空字符串上工作得很好 – Grundy

+0

@Grundy,你說的對,我應該用其他方式寫。 – ssilas777