如何从对象标签中获取 html 元素?

IT技术 javascript jquery html
2021-02-07 12:13:00

我正在使用对象标记在 html 页面中加载 html 片段。

我的代码看起来像这样:

<html><object data="/html_template"></object></html>

正如预期的那样,页面加载后,对象标签之间会添加一些元素。我想获取这些元素,但似乎无法访问它们。

我试过以下 $("object").html() $("object").children() $("object")[0].innerHTML

这些似乎都不起作用。有没有另一种方法来获取这些元素?

编辑:

一个更详细的例子:

考虑这个

<html><object data="http://www.YouTube.com/v/GGT8ZCTBoBA?fs=1&hl=en_US"></object></html>

如果我尝试在对象中获取 html,则会得到一个空字符串。

http://jsfiddle.net/wwrbJ/1/

6个回答

只要将它放在同一个域中,就可以执行以下操作:

HTML

<html>
    <object id="t" data="/html_template" type="text/html">
    </object>
</html>

JavaScript

var t=document.querySelector("#t");
var htmlDocument= t.contentDocument;

innerHTML将provid访问是在之间的HTML<object></object>所问的是如何让对象在它正在生成的窗口/框架内加载 html(它与打开和关闭标签之间的代码无关)。

我也在寻找这个问题的答案,恐怕没有。如果我找到一个,我会回来把它张贴在这里,但我现在正在寻找(而不是一个人)很多时间。

不,不可能访问跨域框架!

我知道这是一个老问题,但这里是......

我在个人网站上使用了它,并最终在一些工作项目中实现了它,但这就是我连接到 svg dom 的方式。请注意,您需要在加载对象标记后运行它(因此您可以使用 onload 函数触发它)。它可能需要对非 svg 元素进行调整。

function hooksvg(elementID) { //Hook in the contentDocument of the svg so we can fire its internal scripts
   var svgdoc, svgwin, returnvalue = false;
   var object = (typeof elementID === 'string' ? document.getElementById(elementID) : elementID);
   if (object && object.contentDocument) {
      svgdoc = object.contentDocument;
   }
   else {
      if (typeof object.getSVGDocument == _f) {
         try {
            svgdoc = object.getSVGDocument();
         } catch (exception) {
            //console.log('Neither the HTMLObjectElement nor the GetSVGDocument interface are implemented');
         }
      }
   }
   if (svgdoc && svgdoc.defaultView) {
      svgwin = svgdoc.defaultView;
   }
   else if (object.window) {
      svgwin = object.window;
   }
   else {
      if (typeof object.getWindow == _f) {
         try {
            svgwin = object.getWindow();//TODO look at fixing this 
         }
         catch (exception) {
            // console.log('The DocumentView interface is not supported\r\n Non-W3C methods of obtaining "window" also failed');
         }
      }
   }
   //console.log('svgdoc is ' + svgdoc + ' and svgwin is ' + svgwin);
   if (typeof svgwin === _u || typeof svgwin === null) {
      returnvalue = null;
   } else {
      returnvalue = svgwin;
   }
   return returnvalue;
};

如果您想从 svg 的 dom 中获取符号元素,您的 onload 函数可能如下所示:

function loadedsvg(){
   var svg = hooksvg('mysvgid');
   var symbols = svg.document.getElementsByTagName('symbol');
}

这是一段有效的示例代码。不确定您的代码有什么问题。

<html>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
 <script type="text/javascript">
    $(document).ready(function(){
            var k = $("object")[0].innerHTML;
            alert(k);
            $("object")[0].innerHTML = "testing";
        });
 </script>
<object data="/html_template">hi</object>
</html>