jquery 选择 iframe 子级

IT技术 javascript jquery
2021-03-06 23:56:41

我正在使用 editArea 库和 jquery 来做我需要的......

http://www.cdolivet.com/index.php?page=editArea&sess=2b8243f679e0d472397bfa959e1d3841

所以在我的 html 中有一个 iframe 标签,editArea 使用我需要的是使用 jquery 访问类似的东西

$('iframe textarea').keydown(function (e){
   number = 17; //any number really :)
    if(e.which == number){
        //do something...
        alert('Done...');
    }
});

我尝试了上面的方法,但看起来它没有检测到那个键。但是如果选择器是 $(document) 它就可以工作,因此该函数的其余部分可以工作,只是它没有选择 iframes textarea keydown

有任何想法吗?谢谢

6个回答
$("iframe").contents().find("textarea").keydown(...)
应该注意 .contents() 仅当您在同一个域中时才有效
2021-04-26 23:56:41
如果不在同一个域上怎么办?至少仍然可以使用在该 iframe 中单击的元素来触发父窗口中的某些内容吗?
2021-05-07 23:56:41
.contents()如果您在浏览器上加载静态 html 文件,不起作用。
2021-05-17 23:56:41
另一种语法: $("textarea", $("iframe").contents()).keydown(...)
2021-05-19 23:56:41

您需要在documentiframe的内部进行搜索,以获取textarea元素:

var textarea = $('textarea', $('iframe').get(0).contentWindow.document);
textarea.keydown(function (e){
   var number = 17;
   var code = (e.keyCode ? e.keyCode : e.which);

    if(code == number){
        //do something...
        alert('Done...');
    }
});

您可以旅行任何级别,以上答案是正确的。我做了如下

var iframeMain = $("#iframe0").contents().find('#iframeMain');
var detailsForm = $(iframeMain).contents().find('#detailsform');

访问父母,您可以使用

window.parent.parent. // upto any level 

您需要访问 iframes contentWindow.document,而不是 iframe 本身。

这就像一个魅力。示例:使用document.querySelector('#test_frame').contentWindow.document而不仅仅是document. 有关详细信息,请参阅HTMLIFrameElement.contentWindow - MDN 网络文档
2021-05-13 23:56:41

你应该做


iframeDoc = document.getElementById('resultsFrame').contentWindow;
// result frame is id of iframe
$(iframeDoc).keydown(function(e))
{
// your functionality here
}