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

我用這個作爲querySelector的簡寫。

例如:$('.MainClass').style.display='none';

它的實際工作過,但鉻合金控制檯記錄器顯示錯誤:

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

,這是奇怪的使用$('cssslectorhere')它仍然有效時,因爲。我之所以這樣做是因爲我習慣了jQuery,所以我喜歡$這個符號。但我討厭看到控制檯日誌中的錯誤,無論如何刪除它?

+1

'try .. catch'? – zerkms 2015-01-27 00:56:05

回答

4

您尚未提供所有代碼。冥冥之中,你這樣做:

$(document) 

這個工作在jQuery的,但因爲它不是一個選擇它不會與querySelector工作。

要麼刪除該用法,要麼更改$函數以處理document

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

哇!我有'$(document).ajaxStart(function()'在我的代碼中亂碼了,我只是做了一個ctr + f並找到它,刪除了它,並且一切都很好,謝謝Alexis,併爲這樣一個尷尬的錯誤感到抱歉! – 2015-01-27 01:04:56

0

這聽起來像你的代碼是什麼地方試圖通過document對象,而不是一個字符串選擇在$(document)。你可以解決,通過改變你的代碼如下:

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

然後,這將與你通過如documentdocument.body任何DOM對象的工作。


或者,你可以把更多的是相當多的萬無一失:

//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"); 
    } 
} 

用於爲isNode()功能的討論/參考見this prior answer

+0

感謝jfriend,但它看起來像我剛剛在我的代碼中漂浮$(文檔),雖然感激你的時間 – 2015-01-27 01:11:22

+0

與我的代碼,它會給你一個關於沒有方法命名'.ajaxSetup()'和會發現異常的行號,很容易發現有什麼問題,我認爲在這種經常使用的功能中,可以通過更強大的錯誤檢測和處理來獲得更好的效果。 – jfriend00 2015-01-27 01:18:45

+0

完全合理,我會使用你的代碼,但我已經接受了Alexis的正確答案,我希望使用你的代碼不是一種罪過,而是將她的代碼標記爲一個正確的答案!哈哈,感謝它。祝你有個美好的夜晚:) – 2015-01-27 01:19:27