我有一个页面,其中包含4个iframe。我想使用jQuery(或纯JavaScript)循环遍历所有这些iframe(我不知道他们的ID)和主框架并删除具有指定类名的元素。我将调用此函数从Chrome扩展程序中删除这些元素。
我该怎么做?谢谢你的回答。
答案 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);
});
用您的值替换iframe
,element
和code
。
潜在的解决方案:
$(document).ready(function() {
$.each('iframe', function(k, v) {
$(this).contents().find('div').html('Hello, world!');
});
});
答案 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;
}