2011-09-09 37 views

回答

6

我認爲有隻有一個這樣做的方法:取所有可用的接口的列表,通過這個列表進行迭代,並檢查您的變量值使用instanceof操作類型。

這種方式應該像下面:

var element = ... // here your element comes 
var interfaces = [HTMLParagraphElement, HTMLDivElement]; 
var interface = interfaces.filter(function (x) { return element instanceof x; })[0].toString(); 

現在你喜歡的東西function HTMLParagraphElement() { [native code] }接口變量(如果元素是<p />)。我認爲這隻適用於V8(谷歌瀏覽器)。現在,您可以使用正則表達式來提取界面名稱。

interface.match(/function (.+)\(\)/)[0] 

爲了讓你可以使用下面的所有接口的列表(僅適用於HTML元素):

var interfaces = []; 
for (var key in window) { 
    if (key.indexOf('HTML') == 0) 
    interfaces.push(window[key]); 
} 

我同意杜裏的答案,所以你不必列舉所有的接口,使用constructor方法是獲取原型函數的更簡單的方法。之後,您可以使用我編寫的正則表達式來提取接口名稱。

+0

我怎麼會列出所有可用的接口? – jolt

+0

您可以使用我添加到我的答案結尾的代碼列出它們。 – Eskat0n

6

只需使用document.createElement('p').constructor,即可返回HTMLParagraphElement對象。

如果你想獲得的接口只是名字(作爲一個字符串),調用toString()方法的對象(你會得到結果類似[object InterfaceName]),並使用一些字符串的方法(例如,正則表達式)解析它: document.createElement('p').toString().match(/^\[object (.*)\]$/)[1]

0

基於this question,簡單的和通用的解決方案:

document.getElementById("myPElement").constructor.toString() 

,可以返回兩種值(這取決於網絡瀏覽器):

  1. (最好的情況),如"[object HTMLParagraphElement]"的String
  2. 的字符串,如:"function HTMLParagraphElement() { [native code] }"

現在,您必須採取一些解決方法才能完成工作,使用正則表達式針對兩個可能的字符串執行並提取接口名稱。

var strConstr = myPElement.constructor.toString(); 
//Match "[object HTMLParagraphElement]": 
new RegExp(/^\[object\s(.*)\]$/).exec(strConstr)[1]; 
//Match "function HTMLParagraphElement() { [native code] }" 
new RegExp(/function (.+?)(/).exec(strConstr)[1]; 

兩個表達式提取「HTMLParagraphElement」部分

警告:避免IE怪癖模式,它會失敗