如何使用Javascript判断一个对象是否为HTML文档

3
我是一名有用的助手,可以为您翻译文本。以下是需要翻译的内容:

我正在将一个对象传递给一个函数,比如说obj。这个obj可能是任何类型的 - (TemplatedHelper、AlertMessage、PartialViews、HTMLDocument等)。我想知道obj是否是一个HTML文档。有哪些可能的方法来实现它?

我已经尝试使用

    var containerCount = $(obj).length;
      for (var ctr = 0; ctr < containerCount; ctr++) {
        var containerTagName = $(obj)[ctr].tagName;
        alert(containerTagName); // to know all detected tagNames
                                 // this returns LINK, SCRIPT, DIV, INPUT, etc..                   
        if ((containerTagName == "TITLE") || (containerTagName == "HTML")) {
          var isHTML = true;
          break;
        }
      }

使用上述代码,Chrome仅检测title标签,但IE8不能检测htmlheadtitle标签。而这些片段代码在IE8中也无法工作:

    alert($(obj).has('title')); // or 'html' as element parameter, returns [object Object]
    alert($(obj).find('title')); // or 'html' as element parameter, returns [object Object]
    if ($(obj)[ctr].parent())  
      alert($(obj)[ctr].parent().get(0).tagName); // returns undefined

请与我分享您对此的想法。谢谢!

一个HTML文档不一定要有title标签。 - Brad
1
看看这个问题及其答案。 - annonymously
@匿名:obj也可能是PartialView,它必须使用不同于*HTMLDocuments'*的函数。应该怎么做? - ideAvi
使用 if (obj instanceof HTMLDocument) 来判断 obj 是否为 HTMLDocument 类型。根据我的理解,这就是你想要的。 - annonymously
@Brad:是的,这就是为令我在所有HTML文档中都包含了标题标签的原因;只有htmlheadtitle标签才能使HTML文档与PartialViews不同,难道我漏掉了什么吗? - ideAvi
显示剩余2条评论
2个回答

9

试试这个:

if (obj instanceof HTMLDocument)
{
    // obj is a HTMLDocument
}
if (Object.prototype.toString.call(obj) == "[object HTMLDocument]")
{
    // obj is a HTMLDocument
}

显示了“Microsoft JScript运行时错误:需要函数”错误,但当我忽略该错误时,它返回了“True”。出了什么问题? - ideAvi
我不知道为什么会出现错误,但如果它能够运行,就忽略它吧。 - annonymously
1
第一个“if”对于来自其他iframe的文档是错误的。第二个更通用。 - Adi Darachi

0
你可以试试这个。
$obj.is('html')

obj 不是标签而是 HTML 文档,但我明白你的意思。在使用你的答案之前,我必须先选择 html 标签。你有任何想法如何实现吗? - ideAvi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接