Javascript 如何通过数据属性在iframe内的元素上使用insertBefore

Javascript 如何通过数据属性在iframe内的元素上使用insertBefore,javascript,jquery,Javascript,Jquery,我的页面中有一个iframe,我想通过选择带有“数据属性”的目标来移动元素,因此我尝试执行以下操作: var ifr=frames['myiframeID'].document; var element='#idofdiv'; var destination='value_for_my_attribute'; 我是这样试的 $(element,ifr).insertBefore('[data-my-attribute="'+destination+'"]'); $(element,ifr)

我的页面中有一个iframe,我想通过选择带有“数据属性”的目标来移动元素,因此我尝试执行以下操作:

var ifr=frames['myiframeID'].document;
var element='#idofdiv';
var destination='value_for_my_attribute';
我是这样试的

$(element,ifr).insertBefore('[data-my-attribute="'+destination+'"]'); 
$(element,ifr).insertBefore('[data-my-attribute="'+destination+'"]', ifr); 
就这样

$(element,ifr).insertBefore('[data-my-attribute="'+destination+'"]'); 
$(element,ifr).insertBefore('[data-my-attribute="'+destination+'"]', ifr); 
两败俱伤,什么也没发生

我做错了什么

更新 我检查一下:

console.log('check',$(element,ifr), $('[data-my-attribute="'+destination+'"]', ifra));
两者都将返回对象

注意:正如您所说,您确实满足同源策略,因此理论上您应该能够访问和操作从属iframedom

它不起作用的原因是选择器的工作方式。如果两个元素都应该位于与代码运行位置不同的框架内,则需要选择它们,以提供其父框架。你的代码没有。仅正确选择了要插入的元素,但未正确选择目标数据属性化引用元素的选择器

$(element, ifr).insertBefore('[data-my-attribute="'+destination+'"]');
// ^ correct                 ^ incorrect
根据jQuery文档,您不能简单地将父元素添加到
insertBefore
函数调用中

因此,这应该起作用:

var el = $(element, ifr);
var ref = $('[data-my-attribute="'+destination+'"]', ifr);
el.insertBefore(ref);
// or
ref.before(el);
这应该像预期的那样起作用

注意:正如您所说,您确实满足同源策略,因此理论上您应该能够访问和操作从属iframedom

它不起作用的原因是选择器的工作方式。如果两个元素都应该位于与代码运行位置不同的框架内,则需要选择它们,以提供其父框架。你的代码没有。仅正确选择了要插入的元素,但未正确选择目标数据属性化引用元素的选择器

$(element, ifr).insertBefore('[data-my-attribute="'+destination+'"]');
// ^ correct                 ^ incorrect
根据jQuery文档,您不能简单地将父元素添加到
insertBefore
函数调用中

因此,这应该起作用:

var el = $(element, ifr);
var ref = $('[data-my-attribute="'+destination+'"]', ifr);
el.insertBefore(ref);
// or
ref.before(el);

这应该按预期工作。

您是否满足相同的源策略规则?是的,所有其他操作都有效-仅在这一部分我找不到方法,我认为我以错误的方式执行了最后一个选择器的部分?”(“[data my attribute=“”+destination+“]”,ifr)”您是否尝试手动选择具有数据属性的元素,因此,您还可以确保它正在所需IFRAME中查找元素?我会尝试将字符串数据选择器替换为
$('[data my attribute=“'+destination+'“]”,ifr)
。问题是,你的insertBefore选择器可能与任何元素都不匹配。我已经更新了我的帖子,最后你可以看到手动选择的结果-这将起作用。现在我必须弄清楚,为什么我要插入的代码不能工作!?如果将代码更改为
$(元素,ifr).insertBefore($('[data my attribute=“'+destination+'']”,ifr)),则为一个假设它开始工作?您是否满足相同的源策略规则?是的,所有其他操作都有效-仅在这一部分我找不到方法,我认为我以错误的方式执行了最后一个选择器的部分?”(“[data my attribute=“”+destination+”]”,ifr)”您是否尝试过使用数据属性手动选择元素,因此,您还可以确保它正在所需IFRAME中查找元素?我会尝试将字符串数据选择器替换为
$('[data my attribute=“'+destination+'“]”,ifr)
。问题是,你的insertBefore选择器可能与任何元素都不匹配。我已经更新了我的帖子,最后你可以看到手动选择的结果-这将起作用。现在我必须弄清楚,为什么我要插入的代码不能工作!?如果将代码更改为
$(元素,ifr).insertBefore($('[data my attribute=“'+destination+'']”,ifr)),则为一个假设它开始工作了吗?