使用jQuery为iframe添加data属性无效,求解决方案
问题分析与解决方案
首先咱们来拆解下问题根源:你用_.escape(embeddedInline)把要插入的HTML内容转义了,这会导致<iframe>标签变成纯文本形式(比如<iframe...>),而不是真实可渲染的DOM元素。这样一来,$('#inlineIframe')根本找不到对应的节点,自然没法给它添加data属性。
第一步:修复HTML渲染问题
先把填充code元素的代码改一下,去掉_.escape()——因为你要插入的是可渲染的HTML内容,不是用来展示的代码文本:
var embeddedInline = '<link rel="stylesheet" href="https://example.com/css.css"><div class="alert alert-secondary" style="background-color: #f6f6f6!important;"><button id="ce_openOverlay" class="btn btn-church" data-ce_sub="https://example.com/inline" data-ce_eventid="263">Jetzt buchen</button><div id="ce_overlay"></div></div><script src="' + linkJs + '"></script>'; $('#embeddedCodeInline').empty().append(embeddedInline); // 移除_.escape()
改完之后,iframe就会被正确渲染成DOM元素,这时候你的颜色选择器代码就能找到它了。
第二步:验证data属性添加逻辑
你的原代码逻辑本身没问题,现在iframe存在了,这段代码就能正常给它加上data-buttoncolor属性:
$('#buttonColorChooser').on('change', function(){ $('#inlineIframe').data('buttoncolor', $(this).val()) });
如果embeddedInline是异步动态加载的,要确保这段事件绑定代码在iframe插入之后执行,或者改用事件委托绑定在父元素上,避免找不到元素的情况。
额外补充:如果想让iframe内的按钮变色
如果你最终目的是让iframe里的按钮跟着选择的颜色变化,那仅仅加data属性还不够,得根据跨域情况处理:
- 同域场景:直接操作iframe内部的DOM元素就行:
$('#buttonColorChooser').on('change', function(){ var selectedColor = $(this).val(); // 访问iframe内部的按钮并修改颜色 $('#inlineIframe').contents().find('#ce_openOverlay').css('background-color', selectedColor); }); - 跨域场景:需要用
postMessage传递颜色值,然后在iframe内部监听message事件来修改按钮颜色。
内容的提问来源于stack exchange,提问作者user13553026
相关产品推荐
相关产品推荐

