【发布时间】:2014-12-05 13:26:18
【问题描述】:
我正在尝试将 iframe 的主体用作 Backbone Marionette 中的区域。 Marionette 使用标准的 jquery 选择器来定义哪个元素是区域,如下所示:
App.addRegions( { main: "#main-region" } );
我希望我的区域成为 iframe 的主体,通常我会这样发现:
$('iframe').contents().find('body');
当试图把上面作为区域时,像这样:
App.addRegions( { main: $('iframe').contents().find('body') } );
抛出以下错误:
Uncaught Error: Syntax error, unrecognized expression: iframe.contents() body
Sizzle.error jquery.js?body=1:4681
tokenize jquery.js?body=1:4742
select jquery.js?body=1:5114
我试着直接把选择器放进去:
App.addRegions( { main: "iframe.contents() body" } );
但它给了我完全相同的错误。
编辑:
还尝试为它创建一个伪选择器:
$.expr[":"].contents = $.expr.createPseudo(function(selector) {
return function(el) {
var $el;
$el = $(el);
console.log($el.contents().find(selector));
return $($el.contents().find(selector));
};
});
// Usage: $('iframe:contents body');
在函数本身中记录 iframe 的主体:
[body, prevObject: jQuery.fn.jQuery.init[1], context: iframe, selector: ".contents() body", constructor: function, init: function…]
但最终以某种方式返回 iframe 元素:
[iframe, prevObject: jQuery.fn.jQuery.init[1], context: document, selector: "iframe:contents(body)", constructor: function, init: function…]
所以,我需要的是一个能够获取 iframe 的主体或其他可以与 Marionette 一起使用的选择器。
有没有办法做到这一点?
【问题讨论】:
-
我明白为什么“App.addRegions({ main: $('iframe').contents().find('body') });”因为 marionnette 中定义的区域必须是字符串而不是对象,为什么不将类或 id 添加到 iframe 的主体中并在主干代码中引用它?有可能吗?
-
我会尝试,但我不希望它起作用。问题是我的 JS 在顶部窗口中运行,并且该区域应该是 iframe 中的 body 元素(
$('iframe body'))。 -
当你实例化区域时,你可以为它提供一个 el 属性,它是一个 jquery 对象 - 类似的东西有用吗?
-
不,这不起作用,它会抓取 jQuery 对象的选择器属性
iframe.contents() body并抛出上述错误。
标签: javascript jquery backbone.js iframe marionette