如何在jQuery选择器中更改上下文

如何在jQuery选择器中更改上下文,jquery,html,jquery-selectors,Jquery,Html,Jquery Selectors,我正在处理两个独立的HTML文件;文件one是主页面,而文件two包含剑道UI弹出对话框的主体。该弹出窗口将在主页中使用 在文件two的Javascript中,我尝试引用文件one中的HTML元素。它不起作用 通过一些调试,我成功地发现了以下几点: // In Javascript of file two. console.log($("#StartPayrollButton")); // Output in Firefox console: Object { context: HTMLDocu

我正在处理两个独立的HTML文件;文件one是主页面,而文件two包含剑道UI弹出对话框的主体。该弹出窗口将在主页中使用

在文件two的Javascript中,我尝试引用文件one中的HTML元素。它不起作用

通过一些调试,我成功地发现了以下几点:

// In Javascript of file two.
console.log($("#StartPayrollButton"));
// Output in Firefox console:
Object { context: HTMLDocument → CalendarDetails, selector: "#StartPayrollButton" }
以下是我在控制台中手动运行同一行时得到的结果:

// Manually run in the Firefox console.
console.log($("#StartPayrollButton"));
// Output in Firefox console:
Object { 0: <a#StartPayrollButton.btn.btn-large.btn-squared-default.blue>, length: 1, context: HTMLDocument → MA0004, selector: "#StartPayrollButton" }

上下文基本上是它开始搜索给定选择器的起点,在本机JavaScript中的等价物类似于

var context = document.getElementById('parent'); // the context here is "document"

var child = context.getElementById('child'); // now the context is the "#parent" element
在jQuery中,您将上下文设置为
$()

在jQuery中,这意味着同样的事情

$('#child', '#parent')
当然,这些只是示例,ID必须是唯一的,所以为ID使用上下文并不是真正必要的,但是对于其他类型的选择器来说,这样做是有意义的,只选择其他元素中的元素等等。事实上,jQuery的上下文做的事情与

$('#parent').find('#child')

我最终通过以下方式解决了这个问题:

// In Javascript of file two.
console.log($("#StartPayrollButton"));
// Output in Firefox console:
Object { context: HTMLDocument → CalendarDetails, selector: "#StartPayrollButton" }
window.parent.$(“#开始旋转按钮”)


请注意
窗口。parent
允许单独的
iframe
中的对话框访问主页中的元素。

逐页,您的意思是两个不同的页面,就像您的对话框使用iframe一样吗?使用不同的ID以避免类似“#StartPayrollButton one”这样的混淆。@KevinB我不知道,因为我最初没有实现这个。我可以问开发者明天什么时候来。你也可以检查元素…@SaurabhGupta这个问题与重复ID无关;该ID在文件1中只使用一次,在文件2中不用于任何HTML元素。感谢您的澄清!是否可以强制上下文成为整个HTML页面,而不仅仅是剑道UI对话框?我想这取决于调用的是什么
$()
,如果您无法控制如何使用给定的上下文调用
$()
,您可能以后无法更改它。
$('#parent').find('#child')