直來直去地說:
- 沒有,jQuery有沒有方法來檢查是否選擇是有效的。
- jQuery有很多正則表達式,所以你不能在代碼中找到一個。
- 您不必爲此編寫一個巨大的正則表達式,答案更簡單,如下所示。
我明白你的問題,因爲我經歷過,有些情況下你不能控制選擇器給jQuery函數。
這個問題沒有足夠概括的是,如果選擇器無效jQuery拋出一個錯誤(這很重要,因爲這裏是答案)。
實施例使用jQuery v1.9.1的:
$('##somewhere');
它記錄到控制檯以下行:
throw new Error("Syntax error, unrecognized expression: " + msg);
其源位於的jquery.js文件的4421行(非精縮和未壓縮版本)。
因此,而不是尋找的jQuery的內部方法(它肯定可以簡化事情,但不可用),你可以只聽拋出建立錯誤,如果選擇是有效的:
function isValidSelector(selector) {
if (typeof(selector) !== 'string') {
return false;
}
try {
var $element = $(selector);
} catch(error) {
return false;
}
return true;
}
你也可以把它jQuery插件:
jQuery.extend({
isValidSelector: function(selector) {
if (typeof(selector) !== 'string') {
return false;
}
try {
var $element = $(selector);
} catch(error) {
return false;
}
return true;
}
});
使用這種方式:
alert($.isValidSelector('#what?!?'));
此致敬禮。
編輯: 添加類型驗證:選擇器必須是字符串。 無論如何,這是一個部分解決方案,它不會爲定義爲不是基本類型的字符串對象var selector = new String('#@wrong-selector#!');
的選擇器返回false。
爲什麼不傳遞實際的jQuery對象? '$('selector')'應該很容易檢查... – 2011-06-08 18:18:21
@jcinacio:謝謝,但我實際上也在檢查。我的目標是創建一個非常隨意的參數。 – UpHelix 2011-06-08 18:25:02
'$('selector')'不適合這個目的,因爲如果它無效,就會拋出一個錯誤。 – 2013-06-02 20:29:59