jQuery从所有iframe中删除元素

时间:2014-10-14 07:13:11

标签: javascript jquery iframe

我有一个页面,其中包含4个iframe。我想使用jQuery(或纯JavaScript)循环遍历所有这些iframe(我不知道他们的ID)和主框架并删除具有指定类名的元素。我将调用此函数从Chrome扩展程序中删除这些元素。

我该怎么做?谢谢你的回答。

5 个答案:

答案 0 :(得分:0)

类似的东西:

var 
  i, len,
  target_class = 'class_name',
  $iframes = $( 'iframe', top.document );         // <-- add top.document

for ( i = 0, len = $iframes.length; i < len; ++i ) {
  $iframes.eq( i ).contents().find( '.'+ target_class ).remove();
}
$( '.'+ target_class, top.document ).remove();    // <-- add top.document

或与vanilla js:

var
  i, len,
  target_class = 'class_name',
  iframes = top.document.getElementsByTagName( 'iframe' ), // <-- add top.document

  removeByClass = function ( doc, class_name ) {
    var i, len, el, 
      toRemoves = doc.getElementsByClassName( class_name );

    for ( i = 0, len = toRemoves.length; i < len; ++i ) {
      el = toRemoves[ i ];
      if ( el.parentNode ) {
        el.parentNode.removeChild( el );
      }
    }
  };

for ( i = 0, len = iframes.length; i < len; ++i ) {
  removeByClass( iframes[ i ].contentDocument, target_class );
}

removeByClass( top.document, target_class );    // <-- add top.document

修改 添加了从iframe内部调用的可能性,但他们必须来自同一个域!!

答案 1 :(得分:0)

找到iFrame并使用.contents()

$(document).ready(function() {
    $(iframe).contents().find(element).html(code);
});

用您的值替换iframeelementcode

潜在的解决方案:

$(document).ready(function() {
    $.each('iframe', function(k, v) {
        $(this).contents().find('div').html('Hello, world!');
    });
});

此外,此问题已在herehere之前得到解答。

答案 2 :(得分:0)

使用jQuery你可以实现这样:

$("iframe").each(function() {
    $(this).contents().find("element.classname").remove();
});

答案 3 :(得分:0)

使用这些函数,并将'.class-name'替换为您的类名(您可以使用任何jQuery选择器)。

var getIFrameDocument = function(iframe) {
    var doc;
    try {
        if ((typeof InstallTrigger !== 'undefined') && (iframe.contentDocument)) { // Firefox, Opera
            doc = iframe.contentDocument;
        } else if (iframe.contentWindow) { // Internet Explorer
            doc = iframe.contentWindow.document;
        } else if (iframe.document) { // Others?
            doc = iframe.document;
        }
    } catch(e) {
    }

    return doc;
};

var findElementRecursively = function(selector, doc) {
    try { /* Helps prevent errors like "Permission denied to access property 'jquery'" */
        var element = jQuery(selector, doc);
    } catch (e) {
        return null;
    }

    if (element.length !== 0) {
        return element;
    }

    try {
        if (doc && doc.location === 'about:blank') {
            return null;
        }
    } catch (e) {
    }

    try { /* Helps prevent errors like "Permission denied to access property 'jquery'" */
        var iframes = jQuery("iframe", doc);
    } catch (e) {
        return null;
    }

    var result = [];
    for (var i = 0; i < iframes.length; i++) {
        var iframeDoc = getIFrameDocument(iframes[i]);

        if (!(typeof(iframeDoc) === 'undefined')) {
            element = findElementRecursively(selector, iframeDoc);
            if (!(element === null)) {
                for (var j = 0; j < element.length; j++) {
                    result.push(element[j]);
                }
            }
        }
    }

    if (result.length > 0) {
        return jQuery(result);
    } else {
        return null;
    }
};

var element = findElementRecursively('.class-name', document);
if ((!(element === null)) && (element.length > 0)) {
    // element.remove(); // I'm not sure if this works.
    element.each(function() {
        jQuery(this).remove();
    });
}

答案 4 :(得分:0)

此解决方案与iFrame相同。我创建了一个PHP脚本,可以从其他网站获取所有内容,而最重要的部分是您可以轻松地将自定义jQuery应用于该外部内容。请参考以下脚本,该脚本可以从其他网站获取所有内容,然后您也可以应用自定义jQuery / JS。此内容可以在任何元素或任何页面内的任何位置使用。

<div id='myframe'>

  <?php 
   /* 
    Use below function to display final HTML inside this div
   */

   //Display Frame
   echo displayFrame(); 
  ?>

</div>

<?php

/* 
    Function to display frame from another domain 
*/

function displayFrame()
{
    $webUrl = 'http://[external-web-domain.com]/';

    //Get HTML from the URL
    $content = file_get_contents($webUrl);

    //Add custom JS to returned HTML content
    $customJS = "
    <script>

      /* Here I am writing a sample jQuery to hide the navigation menu
         You can write your own jQuery for this content
      */
      //Hide Navigation bar
      jQuery(\".navbar.navbar-default\").hide();

    </script>";

    //Append Custom JS with HTML
    $html = $content . $customJS;

    //Return customized HTML
    return $html;
}