javascript - 如何通过数据属性在 iframe 内的元素上使用 insertBefore
问题描述
我的页面中有一个 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);
两种方式都失败了,什么也没有发生。
我做错了什么?
更新我检查这个:
console.log('check',$(element,ifr), $('[data-my-attribute="'+destination+'"]', ifra));
两者都将返回对象。
解决方案
注意:正如您所说,您确实满足同源策略,因此理论上您应该能够访问和操作从属 IFRAME DOM。
它不起作用的原因是选择器的工作方式。如果两个元素都应该位于与代码运行位置不同的框架内,则需要选择它们并提供其父框架。你的代码没有。只有被插入的元素被正确选择,但目标数据属性引用元素的选择器没有被正确选择。
$(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);
这应该按预期工作。
推荐阅读
- constructor - Three.js THREE.DeviceOrientationControls 不是构造函数
- java - 没有最后一个节点的 LinkedList 的实现
- django - 将数据从两个模型传递到一个 html 页面 - Django
- javascript - 如何根据登录的用户角色禁用 HTML 文档的某些元素?
- java - 如何从 S3 加载 spring application.yml
- windows - 如何从提升的 AHK 脚本启动未提升的 exe?
- qt - 如何添加可以在 ubuntu 桌面(gnome)和活动上显示的 QT 应用程序图标
- powershell - Powershell - 向每一行添加一个字符串
- php - 如何在 intelephense 中定义一个未定义的函数(在 VSCode 中)?
- reactjs - 尝试导入错误:“useTranslation”未从“react-i18next”导出