【问题标题】:mouseenter mouseleave within contents of iframemouseenter mouseleave 在 iframe 的内容中
【发布时间】:2015-01-27 23:16:28
【问题描述】:

我试图突出显示 iframe 中的元素,但没有成功。我试过使用 mouseenter/mouseleave 没有成功。它不会触发。

$('#iframe').contents().mouseenter(function (e) {
    //var element = $(e.target);
    var element = $(this);

    $(element).addClass("highlight");
}).mouseleave(function (e) {
    $(element).removeClass("highlight");
});

我在 mousemove 方面取得了更好的成功,但它也突出了我不想要的父母。

var prevElement;
$('#iframe').contents().find('html').on('mousedown', function (e) {
    e.stoppropagation()
    //e.preventDefault - did not work either
    var element = $(e.target);


    if (prevElement == null) {
        prevElement = element;
        element.addClass("edit-element-selector");
    }
    else {
        if (prevElement != element) {
            prevElement.removeClass("highlight");
            //prevElement.parents().removeClass("highlight"); did not work
            element.addClass("highlight");
        }   
    }
});

HTML

<iframe id="iframe" srcdoc="@Html.Raw(ViewBag.html)"></iframe>

【问题讨论】:

  • 有你的 html 吗?
  • @DomAdams 添加了 html。没有太多。它实际上只是一个 iframe。

标签: javascript jquery iframe mouseover mouseenter


【解决方案1】:

.hover 的 css 规则在 iframe 的上下文中不可见。 要么使用 .css() 直接设置样式,添加 css 链接,要么使用 jQuery 将主文档中的所有样式克隆到 iframe 中。

这是一个可以工作的 jfiddle,您应该可以轻松复制它。

http://jsfiddle.net/danmana/pMBw2/

【讨论】:

  • 谢谢,但我仍然无法正常工作。 tt没有什么可以做的css。悬停只会触发 iframe 中内容的 html 元素,但不会触发其中的任何其他元素。
【解决方案2】:

我的问题有 2 个问题。

  1. 我的 css 错了。

    错了

    .highlight :hover { 
      outline:4px solid #f00;
    }
    

    .highlight {  
      outline:4px solid #f00; 
    }
    
  2. Hover 正在向父母冒泡。但是,Mouseenter 和 mouseleave 有效。

    var $iframe = $("#iframe").contents(); 
    
    $iframe.find('*').mouseover(function (e) {
        $(e.target).addClass('highlight');
    }).mouseout(function (e) {
        $(e.target).removeClass('highlight');
    });
    

【讨论】:

    【解决方案3】:

    试试jQuery Hover

        $(function () {
            var iContent = $('#iframe').contents();
            iContent.find('#id_username').val("New Value!");
            iContent.find('#id_username').hover(function () {
                $(this).css("border", "1px solid red");
            }, function () {
                $(this).css("border", "1px solid #c4c7cb");
            });
            console.log(iContent.find('#id_username'));
        });
    

    jsFiddle

    抱歉,我想我误解了这个问题。这是一个更新的小提琴,它改变了文本输入的值并在悬停时改变了边框颜色。

    【讨论】:

    • 不幸的是它没有用。它告诉我我将鼠标悬停在 iframe 上,但没有获取其中的元素。
    • 我不能使用 find() 因为它不限于一个元素。我确实尝试过$iframe.find('*').hover(function () {...,它改变了元素的边框,但也改变了我不想要的父母。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2019-04-26
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多