jQuery - функция isSelector - PullRequest
       17

jQuery - функция isSelector

2 голосов
/ 16 февраля 2012

Мне не удалось найти ничего, что было бы полезно в моей конкретной ситуации, поэтому вот вопрос: для конкретной строки, как проверить, является ли он правильным селектором jQuery (на данный момент давайте сделаем его простым и ограничимся непривычным jQuery-селекторы), или, если это слишком сложно, допустимый CSS-селектор - в основном:

$.isSelector("div") = return true
$.isSelector("* [") = return false - unclosed attribute selector
$.isSelector("* []") = return false - empty attribute selector
$.isSelector("* [name]") = return true
$.isSelector("/hiThere") = return false - invalid / character
$.isSelector("body > ") = return false - > without following child selector
$.isSelector("body > [name=\\\[girls_just_want_to_have_fun\\\]].on a .beach") = return true

Возможно, есть внутренняя функция jQuery, которая выполняет проверку (или RegExp), но мой вуду слишком беден, чтобы найти его.

Возможно что-то вроде этого:

function isSelector(string)
{ 
   try 
   { 
       $(string); 
       return true;
   } 
   catch(e) 
   { 
       return false; 
   }
}

бы справиться, но это выглядит немного экстремально.

Ура!

Ответы [ 2 ]

0 голосов
/ 29 июня 2016

Я использовал это решение:

function isSelector(string)
{
    var ns = document.styleSheets[0];

    if (!ns)
    {
        document.getElementsByTagName('head')[0].appendChild(document.createElement('style'));
        ns = document.styleSheets[0];
    }

    try
    {
        ns.insertRule(string+" {}", 0);
        ns.deleteRule(0);

        return true;
    }
    catch(e)
    {
        return false;
    }
}

Дополнительно, этот (действительный) пример

isSelector('#\\~\\!\\@\\$\\%\\^\\&\\*\\(\\)\\_\\+-\\=\\,\\.\\/\\\'\\;\\:\\"\\?\\>\\<\\[\\]\\\\\\{\\}\\|\\`\\#')`

возвращает истину

0 голосов
/ 16 февраля 2012

для конкретной строки, как проверить правильность выбора jQuery

Вы не можете.Селектором может быть что угодно, например, моя страница может состоять из набора blah с, что делает $("blah") совершенно корректным.

jQuery выполняет некоторую проверку строки, которую вы передаете в качестве аргумента, это происходит в методе ядра init, который я выделил вам в исходном браузере:

https://github.com/jquery/jquery/blob/master/src/core.js#L78-186

...