Javascript 如何知道DOM元素是否在jquery范围内?
可能重复:Javascript 如何知道DOM元素是否在jquery范围内?,javascript,jquery,Javascript,Jquery,可能重复: 我的asp.net网站中有许多框架。因为我不知道它的布局,我需要更新jquery代码所在的不同帧中的值,所以我执行以下操作: $('myspan').text('sometext') 但一切都变了。所以我不知道这是否是因为jquery没有用这个选择器捕获元素,因为它不在它的范围内,或者为什么 然而,这: alert($('myspan')它显示一个警报,结果是[object][object]。jQuery函数($('someSelector'))将始终返回一个对象,即使没有与选择器
我的asp.net网站中有许多框架。因为我不知道它的布局,我需要更新jquery代码所在的不同帧中的
值,所以我执行以下操作:
$('myspan').text('sometext')代码>
但一切都变了。所以我不知道这是否是因为jquery没有用这个选择器捕获元素,因为它不在它的范围内,或者为什么
然而,这:
alert($('myspan')代码>它显示一个警报,结果是[object][object]
。jQuery函数($('someSelector')
)将始终返回一个对象,即使没有与选择器匹配的元素
如果您确实在使用多个框架,那么您会遇到一个问题:jQuery无法跨框架找到元素,只能在当前文档/框架中找到元素,除非您为要定位的特定文档传递了适当的上下文对象
例如,如果您有一个
,您可以使用以下内容在其中查找#myspan
:
var frameDoc = $('#myframe')[0].contentWindow.document;
var mySpan = $('#myspan', frameDoc);
要使其工作,iframe的源必须与主页托管在同一个域中。下面的评论中还建议了以下更清洁的选项:
var mySpan = $("#myframe").contents().find('#myspan')
或
jQuery函数($('someSelector')
)将始终返回对象,即使没有与选择器匹配的元素
如果您确实在使用多个框架,那么您会遇到一个问题:jQuery无法跨框架找到元素,只能在当前文档/框架中找到元素,除非您为要定位的特定文档传递了适当的上下文对象
例如,如果您有一个
,您可以使用以下内容在其中查找#myspan
:
var frameDoc = $('#myframe')[0].contentWindow.document;
var mySpan = $('#myspan', frameDoc);
要使其工作,iframe的源必须与主页托管在同一个域中。下面的评论中还建议了以下更清洁的选项:
var mySpan = $("#myframe").contents().find('#myspan')
或
调试jQuery问题的一个好方法是以下模式:
var e = $(...);
console.log(['Explanation', e.get()]);
不带参数的get()
会将奇怪的jQuery选择器结果转换为普通JavaScript数组,您可以在浏览器控制台中展开该数组。这将有助于查看选择器返回的内容
如果它与任何内容都不匹配,那么您的选择器不知何故是错误的。如果元素确实存在,请检查浏览器开发工具中的当前DOM。调试jQuery问题的好方法是以下模式:
var e = $(...);
console.log(['Explanation', e.get()]);
不带参数的get()
会将奇怪的jQuery选择器结果转换为普通JavaScript数组,您可以在浏览器控制台中展开该数组。这将有助于查看选择器返回的内容
如果它与任何内容都不匹配,那么您的选择器不知何故是错误的。如果元素确实存在,请检查浏览器开发工具中的当前DOM。$(#'myspan')
看起来是错误的,您可能是指$('#myspan')
警报($())
也将显示[对象对象]
,因为$()
始终返回对象。警报($(#myspan')代码>显示[object]
并不意味着它与元素匹配。jQuery总是返回一个对象,不管它是否匹配。如果您发出警报($('#myspan').length)
,您可能会看到它不匹配任何元素。有关如何在
中获取元素的信息,请参阅使用具有良好控制台(webkit)的浏览器,并使用console.log($('#myspan')代码>。这比将对象作为字符串发出警报要好得多。$(#'myspan')
看起来是错误的,您可能是指$('#myspan')
警报($())
也将显示[object object]
,因为$()
总是返回一个对象。警报($('myspan')代码>显示[object]
并不意味着它与元素匹配。jQuery总是返回一个对象,不管它是否匹配。如果您发出警报($('#myspan').length)
,您可能会看到它不匹配任何元素。有关如何在
中获取元素的信息,请参阅使用具有良好控制台(webkit)的浏览器,并使用console.log($('#myspan')代码>。这比以字符串形式通知对象要好得多。上下文是否跨帧工作?什么是正确的上下文-iframe.document
?@JanDvorak:如果您的帧位于不同的域上,则会在这里咬到您。var mySpan=$('#mySpan',$(“#myframe”).contents()
有点漂亮。@JanDvorak:AFAIK CORS允许x域请求,而不是x域DOM遍历。请参阅(这些方法中没有一种得到很好的支持)。@JanDvorak只是想确认一下:我已经测试过了,它可以工作(对于同一个域,x域不应该工作)。上下文可以跨帧工作吗?什么是正确的上下文-iframe.document
?@JanDvorak:如果您的帧位于不同的域上,则会在这里咬到您。var mySpan=$('#mySpan',$(“#myframe”).contents()
有点漂亮。@JanDvorak:AFAIK CORS允许x域请求,而不是x域DOM遍历。请参阅(这些方法中没有一种得到很好的支持)。@JanDvorak只是想确认一下:我已经测试过了,它可以工作(对于同一个域,x域不应该工作)。