2015-05-09 54 views
0

Stackoverflow已經有了一個如何檢查元素exists in jQuery的答案。
當使用jQuery的答案,與小的變化,基本上可以歸結爲「送元魔jQuery函數的名稱,並檢查是否返回的東西」:安全地查找jQuery中是否存在元素

if ($('elementName')[0]) ... 

問題這種方法是如果jQuery函數收到一個html片段,它將「實例化」html(包含javascript)並返回代表它的節點。 這意味着jQuery函數只能與受信任的輸入一起使用,至少要將您的網站暴露給基於DOM的XSS like the one reported not long ago for wordpress。 我的問題是:

有沒有辦法使用jQuery來檢查一個元素是否存在不可信輸入?

問題的重要的部分是:使用jQuery
我知道有使用「香草的javascript」替代了jQuery,getElementById

  1. 想到,如果元素不返回null存在;但是... jQuery選擇器比getElementById更強大,jQuery讓你不用擔心瀏覽器是否支持這些功能。
  2. 帶有不可信輸入
    您明顯可以使用正則表達式或html編碼來清理輸入,但您仍然需要擔心瀏覽器對您的清理代碼的支持。

I.e.我的問題基本上是有沒有辦法阻止jQuery創建新的DOM對象,並只是說,jQuery函數的輸入是否映射到現有的DOM對象?

+0

「jQuery選擇器比...更強大」querySelectAll()'? – PeeHaa

回答

4

jQuery的構造函數會做不同的事情取決於輸入的格式,但可以使用find method,以確保它僅使用輸入的選擇(只要輸入一個字符串):

var q = $(document).find(selector); 
if (q.length > 0) { 
    // found something 
} 

如果您想限制搜索到頁面的一部分,也可以使用與document元素不同的起始點。

+0

Doh!當然。 –

+1

感謝您的教育。如果輸入不是有效的表達式,這個將會拋出異常。 –

2

jQuery選擇比的getElementById

考慮在你的jQuery的要求,面對飛行的機會更加強大。 :-)

您正在查找document.querySelector(找到第一個匹配的內容)和document.querySelectorAll(查找所有匹配的元數據)。他們接受全系列的CSS選擇器,而現代瀏覽器的確是一個非常完整的工具包。他們支持所有現代瀏覽器,以及IE8。他們沒有實例化元素,他們純粹查找它們。

+0

謝謝你對此的瞭解。 Javascript並不是我的特長。 –