Как отличить строки селектора jQuery от других строк - PullRequest
2 голосов
/ 15 мая 2011

Я хочу проверить «тип» строки. В частности, как я могу отличить строки селектора jQuery от других строк? Другими словами, как следует реализовать selectorTest в следующем коде?

    var stringType = function( value ) {   
        var htmlExpr = /^[^<]*(<[\w\W]+>)[^>]*$/;

        if ( htmlExpr.test(value) ) {
            return "htmlstring";
        }
        if ( selectorTest ) {
            return "selectorstring";  
        }
        return "string";
    }

Ответы [ 2 ]

5 голосов
/ 15 мая 2011

Вы можете делать то, что делает jQuery внутри, и проверять, является ли он HTML или нет, с помощью следующего регулярного выражения :

/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/

например:

var stringType = function( value ) {   
    var htmlExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/;

    if ( htmlExpr.test(value) ) {
        return "htmlstring";
    }
    if ( selectorTest ) {
        return "selectorstring";  
    }
    return "string";
}

Обратите внимание, что в более поздних версиях jQuery есть еще одна проверка явно для «начиная с <» и «заканчивая >», чтобы пропустить регулярное выражение (чисто для скорости). Проверка выглядит следующим образом в ядре (по состоянию на jQuery 1.6.1):

if ( typeof selector === "string" ) {
    // Are we dealing with HTML string or an ID?
    if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
        // Assume that strings that start and end with <> are HTML and skip the regex check
        match = [ null, selector, null ];
    } else {
        match = quickExpr.exec( selector );
    }
0 голосов
/ 15 мая 2011

может ($(value).size()>0)?

Он проверит, распознается ли селектор.

Но, на мой взгляд, это немного странный способ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...