Вы можете делать то, что делает 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 );
}