Javascript 如何在jquery中访问动态创建的对象标记的内容?

Javascript 如何在jquery中访问动态创建的对象标记的内容?,javascript,jquery,html,Javascript,Jquery,Html,我已经为这个问题寻找了几个小时的答案,但似乎找不到任何有效的解决方案。我已经使用jquery创建了一个动态对象标记,并将其数据设置到我网站上的另一个页面。我将object标记附加到div,并将div附加到页面主体。我想做的是访问我设置为对象标记数据的页面的html,以便监视该页面上的更改,并根据这些更改更新我的当前页面。在html中定义对象标记时,我可以使用对象标记的contentDocument属性访问其内容,但在动态生成标记时,contentDocument是未定义的。我还尝试使用jquer

我已经为这个问题寻找了几个小时的答案,但似乎找不到任何有效的解决方案。我已经使用jquery创建了一个动态对象标记,并将其数据设置到我网站上的另一个页面。我将object标记附加到div,并将div附加到页面主体。我想做的是访问我设置为对象标记数据的页面的html,以便监视该页面上的更改,并根据这些更改更新我的当前页面。在html中定义对象标记时,我可以使用对象标记的contentDocument属性访问其内容,但在动态生成标记时,contentDocument是未定义的。我还尝试使用jquery的contents函数,但它返回一个长度为0的对象。以下是我尝试过的基本内容:

这是我的页面test.php的代码:

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript">
        function test()
        {
            var parentDiv = document.createElement("div");
            $(parentDiv).addClass("parentDiv");
            var object = $("<object>");
            $(object).attr("id","objectId");

            $(parentDiv).append(object);

            $("body").append(parentDiv);
            $(object).attr("data","test2.html");
            $(object).addClass("object");

            // These give errors
            var content = object.contentDocument;
            alert(content.getElementById("div"));
            var content = $(object).contents();
            alert(content.length());

            /* THIS WORKS IF object defined as a tag in HTML body

            var content = document.getElementById("objectId").contentDocument;
            alert(content.getElementById("div").innerHTML);
            */
        }
    </script>   
</head>
<body onload="test()">
<!-- <object id="objectId" data="test2.html"></object> -->
</body>
</html>

试验
功能测试()
{
var parentDiv=document.createElement(“div”);
$(parentDiv).addClass(“parentDiv”);
变量对象=$(“”);
$(object.attr(“id”,“objectId”);
$(parentDiv).append(对象);
$(“正文”).append(parentDiv);
$(object.attr(“data”,“test2.html”);
$(对象).addClass(“对象”);
//这些都是错误的
var content=object.contentDocument;
警报(content.getElementById(“div”);
var content=$(object.contents();
警报(content.length());
/*如果对象在HTML正文中定义为标记,则此操作有效
var content=document.getElementById(“objectId”).contentDocument;
警报(content.getElementById(“div”).innerHTML);
*/
}
这是object data test.html页面的代码:

<!DOCTYPE html>
<html>
<head>
    <title>Test 2</title>
</head>
<body>
   <div id="div" style="width:200px;height:200px;background-color:red">
       DIV Contents
    </div>
</body>
</html>

测试2
DIV目录

非常感谢您的帮助。谢谢。

此时,它是一个jQuery对象。因此,您需要定义它:

// Replace it like this:
var content = document.getElementById("objectId").contentDocument;
var content = object.contentDocument;
alert(content.getElementById("div"));
var content = $(object).contents();
alert(content.length());
或者,您也可以使用以下命令:

// Replace it like this:
var content = $("#objectId").get(0).contentDocument;
var content = object.contentDocument;
alert(content.getElementById("div"));
var content = $(object).contents();
alert(content.length());

我认为您混淆了许多HTML/Javascript概念。我已更正您的代码,至少没有错误:

var parentDiv = document.createElement("div");
$(parentDiv).addClass("parentDiv");
var object = document.createElement("object");
object.setAttribute("id", "objectId");
object.innerHTML = "Hello, Earth!";

$(parentDiv).append(object);

$("body").append(parentDiv);
object.setAttribute("data", "test2.html");
$(object).addClass("object");

var content = document.getElementById("objectId");
alert(content.innerHTML);
  • jQuery“$”函数,与,不是元素创建者相同。此代码,
    var object=$(“”)
    将不起作用,因为页面上不存在CSS选择器所针对的对象。我将该位改为
    document.createElement(“对象”)
  • 由于
    对象
    变量现在是一个DOM元素,因此我选择使用
    .setAttribute
    函数,这是一个本机DOM函数
  • $(“body”).append(parentDiv)
    将正确地将
    parentDiv
    (及其子
    object
    )DOM元素添加到
    body
    元素的末尾。这允许
    $(object).addClass(“object”)
    正常工作
  • contentDocument
    属性是用户的专有属性。我已将属性改为innerHTML。警报框正确显示“Hello,Earth!”这是
    对象的内容

  • 您为什么需要它?对于点击事件等?我需要在对象标签中的页面就像一个警报监视器,并且将不断变化。我需要能够看到何时有警报,并在警报发生时在我的页面上执行一些操作。感谢您的回复Praveen。不幸的是,它仍然在Chrome中给出了相同的错误:Uncaught TypeError:无法读取undefinedIsn的属性'getElementById',没有任何方法可以访问动态创建的对象标记的内容吗?我的意思是,这完全错了!!你想做什么?使用
    content.find(“div”)相同。不幸的是,仍然是相同的错误。页面test2.html的内容显示在我的页面上,但是object.contentDocument在尝试访问外部页面上的元素时返回undefined。如果标签不是动态创建的,它就可以工作。谢谢你的回复。但问题不在于访问对象标记的内部html。我想访问加载到对象变量中的页面上的元素(test2.html上的元素)。如果我直接在我的主体中定义对象标记(而不是动态地附加它),contentDocument属性可以正常工作。如果像您一样动态创建对象变量,是否应该有一种方法来访问对象标记数据页的元素?您是否看到: