如何在不知道其id的情况下获取嵌入对象?

时间:2011-12-06 01:34:19

标签: javascript html

我的html有一个扩展,由其他应用程序嵌入:

document.documentElement.appendChild((function () {
    var objectElement = document.createElement("embed");
    objectElement.setAttribute("id", "my-plugin");
    objectElement.setAttribute("type", "application/x-my-app");
    objectElement.setAttribute("width", "0");
    objectElement.setAttribute("height", "0");
    return objectElement;
}()));

通常我们通过其id:var plugin = document.getElementById("my-plugin");

获取此对象

这里的问题是,该对象是由其他应用程序注入的,其ID可能会有所不同。我只知道它的MIME类型是“x-my-app”,但看起来没有getElementByType()来获取它?

3 个答案:

答案 0 :(得分:1)

您必须根据标记类型embed以及您周围知道的内容找到它。例如,如果你的HTML就像这样,嵌入ID我们不知道:

<div id="homepage">
<div class="decorativeFrame">
<embed id="sk930123">
...
</embed>
</div>
</div>

然后,你会发现它是这样的:

var embeds = document.getElementById("homepage").getElementsByTagName("embed");
// operate on embeds[0]

如果您正在寻找的范围内有多个嵌入,那么您可能需要遍历所有找到的内容并检查嵌入标记的某些属性以识别您正在寻找的那个。

如果你向我们展示了邻近的HTML是什么样的,我们可以准确地找到如何精确调整它。

答案 1 :(得分:1)

sufficiently advanced browsers上,您可以使用querySelector() / querySelectorAll()

document.querySelector("embed[type='application/x-my-app']")

如果使用jQuery,以下内容即使在不够先进的浏览器上也能正常工作:

$("embed[type='application/x-my-app']")

如果两者都没有,您可以遍历所有<embed>标签:

result = [];
var embeds = document.getElementsByTagName('embed');
for (var i = 0; i < embeds.length; i++) {
    var embed = embeds[i];
    if (embed.type === type) {
        result.push(embed);
    }
}

jsFiddle example这三个人。

答案 2 :(得分:0)

您可以使用getElementsByTagName()并循环搜索结果,直到找到具有正确媒体类型的结果。