我试图将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一起使用的东西。
有没有办法完成这项工作?
答案 0 :(得分:0)
不确定您是否已找到此解决方案的答案,但您可以通过自己创建区域而不是依赖于Marionette的内置选择器行为来轻松地完成此工作:
1)首先,您需要创建一个新的Region
并将一个DOM元素作为el
选项传递:
var iframeRegion = new Backbone.Marionette.Region({
// Make sure you get the DOM object out of the jQuery object (eg. the .get() call)
el: $('iframe').contents().find('body').get(0)
});
2)然后将实例添加到您的应用程序而不是使用选择器字符串:
App.addRegions({
main: iframeRegion
});