2015-01-27 3 views
1
function $(e){return document.querySelector(e)} 

Я использую это как стенографию для querySelector.

Например: $('.MainClass').style.display='none';

Это на самом деле работает тоже, но Chromes консоли регистратор выдает ошибку:

Uncaught SyntaxError: Failed to execute 'querySelector' on 'Document': '[object HTMLDocument]' is not a valid selector. 

Что странно, потому что при использовании $('cssslectorhere') он все еще работает. Причина, по которой я это сделал, потому что я так привык к jQuery, что мне понравился символ $. Но я ненавижу видеть эту ошибку в журнале консоли, так или иначе, чтобы удалить ее?

+1

'try .. catch'? – zerkms

ответ

4

Вы не указали весь код. Где-то, что вы делаете это:

$(document) 

Это работает в JQuery, но он не будет работать с querySelector, потому что это не селектор.

Либо удалите это использование, либо измените функцию $ на обработку document.

function $(e){ 
    return e === document ? document : document.querySelector(e); 
} 
+0

Ничего себе! У меня был '$ (document) .ajaxStart (function()' Скрабленный в моем коде.Я просто сделал ctr + f и нашел его. Удалил его, и все хорошо. Спасибо, Алексис и извините за такую ​​смущающую ошибку! –

0

Это звучит как ваш код где-то пытается передать document объект вместо селектора строк, как в $(document). Вы могли бы работать вокруг этого путем изменения кода на это:

function $(e){ 
    if (typeof e === "string") { 
     return document.querySelector(e); 
    } else { 
     return e; 
    } 
} 

Тогда это будет работать с любым DOM объекта, который вы прошли, такие как document или document.body.


Или вы могли бы сделать это совсем немного больше Foolproof:

//Returns true if it is a DOM node 
function isNode(o){ 
    return (
    typeof Node === "object" ? o instanceof Node : 
    o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName==="string" 
); 
} 

function $(e) { 
    if (typeof e === "string") { 
     return document.querySelector(e); 
    } else if isNode(e) { 
     return e; 
    } else { 
     throw new Error("arg in $(arg) must be selector string or DOM node"); 
    } 
} 

См this prior answer для обсуждения/ссылки для функции isNode().

+0

Спасибо jfriend, но похоже, что у меня просто был странный $ (документ), плавающий в моем коде, хотя и оцениваю ваше время. –

+0

С моим кодом он дал бы вам ошибку об отсутствии метода с именем '.ajaxSetup()' и указал бы номер строки для исключения, и было бы легко понять, что не так. Я думаю, вам будет лучше с более надежным обнаружением ошибок и обработкой в ​​такой часто используемой функции. – jfriend00

+0

Полностью разумно, я буду используйте свой код тоже, но я уже принял правильный ответ Алексиса. Надеюсь, это не грех, чтобы использовать ваш код, но отмечайте, что это правильный ответ! Ха-ха, оцените его. Удивительная ночь :) –

Смежные вопросы