Stackoverflow已经有了如何检查元素exists in jQuery的答案 当使用jQuery时,答案很小,基本上归结为“将元素的名称发送到魔法jQuery函数并检查是否返回了某些内容”:
if ($('elementName')[0]) ...
这种方法的问题在于,如果jQuery函数接收到html片段,它将“实例化”html(包含javascript)并返回表示它的节点。 这意味着jQuery函数只能与受信任的输入一起使用,至少您将站点暴露给基于DOM的XSS like the one reported not long ago for wordpress。 我的问题是:
有没有办法使用jQuery检查元素是否存在不受信任的输入?
问题的重要部分是:
null
;但......
jQuery选择器比getElementById
更强大,jQuery使您免于担心浏览器是否支持这些功能。即。我的问题基本上是有一种方法可以阻止jQuery创建新的DOM对象,并说明jQuery函数的输入是否映射到现有的DOM对象?
答案 0 :(得分:4)
jQuery构造函数将根据输入的格式执行不同的操作,但您可以使用find
method确保它仅将输入用作选择器(只要输入是字符串) :
var q = $(document).find(selector);
if (q.length > 0) {
// found something
}
如果您想将搜索限制在页面的一部分,也可以使用与document
元素不同的起点。
答案 1 :(得分:2)
jQuery选择器比getElementById
更强大
有机会面对你的jQuery要求飞行。 : - )
您正在寻找document.querySelector
(找到第一个匹配的元素)和document.querySelectorAll
(找到所有匹配的元素)。他们接受全系列的CSS选择器,在现代浏览器上确实是一个非常完整的工具包。它们受到所有现代浏览器以及IE8的支持。他们没有实例化元素,他们纯粹是查找它们。