jquery iframe主体选择器

jquery iframe主体选择器,jquery,iframe,Jquery,Iframe,是否存在使用jquery访问iframe主体的简单表达式。 假设iframe的id是帧 我想给iframe提供事件处理程序。 比如说, $("#theframe").contents().find("body").click(function() { alert("hello, you touched me~"); }); 但是,这段代码在IE中不起作用 有别的想法吗 帮助我~为iframe元素提供name属性。现在您可以这样引用它: window.name_of_iframe 您的

是否存在使用jquery访问iframe主体的简单表达式。 假设iframe的id是帧

我想给iframe提供事件处理程序。 比如说,

$("#theframe").contents().find("body").click(function() {
    alert("hello, you touched me~");
});
但是,这段代码在IE中不起作用

有别的想法吗
帮助我~

为iframe元素提供name属性。现在您可以这样引用它:

window.name_of_iframe
您的iframe可能没有jQuery,因此,使用标准遍历是一种更安全的方法

iframe_body = window.name_of_iframe.document.getElementsByTagName("body")[0];
这将是iframe中的body元素。但是,jQuery可以在主机页上使用此选项,因此:

$(window.name_of_iframe.document.getElementsByTagName("body")[0]);
是iframe的body元素的jQuery包装器

只有在加载iframe时,才能小心执行此操作:

$("iframe[name=name_of_iframe]").load(function() {
    var iframe_body = window.name_of_iframe.document.getElementsByTagName("body")[0];
    $(iframe_body).click(function() {
        alert("hello, you touched me~");
    });
});

更新:在IE中对其进行了测试,它有一个相当开始的行为。在firefox中,您必须将其包装在文档就绪事件中,但在IE中,它必须在iframe元素之后的外部。这个版本也适用于IE和Firefox

<iframe name="ifr" src="?if=1"></iframe>
<script type="text/javascript">
var ifr_loaded = false;
$("iframe").load(function() {
    $(window.ifr.document.getElementsByTagName("body")[0]).click(function() { alert("s"); });
    ifr_loaded = true;
});
$(function() {
    if (!ifr_loaded)
    {
        $("iframe").load(function() {
            $(window.ifr.document.getElementsByTagName("body")[0]).click(function() { alert("d"); });
        });
    }
});
</script>

var ifr_loaded=假;
$(“iframe”).load(函数(){
$(window.ifr.document.getElementsByTagName(“body”)[0])。单击(函数(){alert(“s”);});
ifr_loaded=真;
});
$(函数(){
如果(!ifr_已加载)
{
$(“iframe”).load(函数(){
$(window.ifr.document.getElementsByTagName(“body”)[0])。单击(函数(){alert(“d”);});
});
}
});

更新2:一个较短的版本,但它有一个缺点,即您必须在javascript中指定iframe的源,但它在我尝试过的所有浏览器中都能工作

<iframe name="ifr"></iframe>
<script type="text/javascript">
$(function() {
    $("iframe").load(function() {
        $(window.ifr.document.getElementsByTagName("body")[0]).click(function() { alert("d"); });
    }).attr("src","/teszt/v/index.php?if=1");
});
</script>

$(函数(){
$(“iframe”).load(函数(){
$(window.ifr.document.getElementsByTagName(“body”)[0])。单击(函数(){alert(“d”);});
}).attr(“src”,“/teszt/v/index.php?if=1”);
});

更新3:和更简单的结束方式:

<script type="text/javascript">
function init_iframe(obj) {
    $(obj.document.getElementsByTagName("body")[0]).click(function() { alert("d"); });
}
</script>
<iframe name="ifr" src="?if=1" onload="init_iframe(window.ifr);"></iframe>

函数初始化iframe(obj){
$(obj.document.getElementsByTagName(“body”)[0])。单击(函数(){alert(“d”);});
}

文档是否位于域上的iframe中?是的,其他目录中的同一域IE给您的错误是什么?框架[0]。文档。单击(函数(){…});这是可行的,我不知道为什么?为了帮助那些与我有相同问题的人,这个脚本的核心部分在iFrame文档上设置样式效果很好,但是对于绑定到iFrame的load函数,我发现在HTML中设置onload属性效果更好。这些方法都不起作用(在chrome40中测试).@Morteza您的iframe是否与主页相同,从同一域加载?如果不是,则同源策略将阻止您访问框架的内容