如何从 JavaScript 访问生成的 HTML 元素?

How to access generated HTML Elements from JavaScript?

我想访问 Dynamics NAV Web 客户端中的 table。如果我检查我正在处理的页面的 html 源代码,它大约有 20 行长,没有任何 table 但是当我在我的 firefox 检查器中查看源代码时,我可以看到 html 结构包括 table-tag.

中的 id

源代码:

检查员代码:

所以我想我可以通过使用 getelementfromid、queryselector 等函数访问我的 html table(只能在检查器中查看)。 结果我总是得到 NULL。

这表明js代码在页面完全呈现之前执行。我决定在它周围包装一个 $(document).ready() 函数,以便在 html 代码出现后开始执行。也不行。

我尝试构建第二个示例。我刚刚创建了一个包含 html-table 的简单 html 页面,并尝试通过我之前提到的函数访问它。这非常有效。

你有任何提示或解决方案我可以如何访问这个 table?

提前致谢

编辑:

$(document).ready(function()
        { 
            var table = document.getelementbyid('5E9D_BusinessGrid')
        });

您试图通过扩展程序访问此 Table?

如果 TABLE 存在,您可以设置一个 setTimeout 计时器重复直到 table 出现,然后在它出现时执行您想要的代码。

这不是真正的代码,但可以让您了解需要做什么。

function REPEAT_LOOK_FOR_TABLE(){
var LEN = document.getElementsByTagName('TABLE').length;
for(i=0; i<LEN; i++){
    console.log(document.getElementsByTagName('TABLE')[i]);
    alert(document.getElementsByTagName('TABLE')[i]);
}
setTimeout( REPEAT_LOOK_FOR_TABLE(); , 1000 ); // Checks ever 1 second.
}REPEAT_LOOK_FOR_TABLE();// Starts it up.

就像我说的那样,这不是一个有效的例子,只要研究或修复它,你就能找到你正在寻找的 table。

你还想放一个 IF 语句,所以如果找到 table,就执行你想要的代码,如果没有找到 table,就让 setTimeout 每隔 1 秒重复一次。所以是的,编写代码以关闭重复的内容:-)

另外 Table 不会出现 onload,因为脚本是独立于页面加载的。如果脚本位于 BODY 上方的 HEADER 部分,则您的脚本字词可以正常工作,因为您的浏览器必须在 onload 完成之前获取这些脚本。不像放在页面中间或 BODY 部分的脚本。

我找到了解决办法。我可以访问从代码中获取 "boot"-script 的代码,例如:

var msnavdocument = document.getElementById("boot").ownerDocument.activeElement.contentDocument;

我可以访问每个 html 组件。 也许这有助于未来的 Microsoft NAV JavaScript Addin Developer。