2013-12-13 56 views
0

我繼續嘗試使用名稱值對JS對象。 JSFIDDLE獲取值串表示的不同結果

<div id="parent" class="parent"> 
    <div id="child" class="child"> 
     <input type="text" class="text"/> 
     <input id="submit" type="submit" onclick="doThis()"/> 
    </div> 
<div> 

JS代碼

function doThis(){ 
    var span= document.createElement("span"); 
    var parent=document.getElementById("parent"); 
    var child=document.getElementById("child"); 
    var submit=document.getElementById("submit"); 
    child.insertBefore(span,submit); 
    myKeys=[]; 
    for(var key in submit){ 
     if(key=="parentNode"){ 
      myKeys.push("{"+key); 
      myKeys.push(" "+submit.key+"}"); 
     } 
    } 
    myKeys.push("{"+"parentNode"); 
    myKeys.push(" "+submit.parentNode+"}"); 
    span.innerHTML=myKeys; 
} 

剛剛創建span包含以下內容:

{parentNode, undefined},{parentNode, [object HTMLDivElement]} 

,但我預計這一span將包含{parentNode, [object HTMLDivElement]},{parentNode, [object HTMLDivElement]}。請解釋我爲什麼發生?

更新:我將鏈接更改爲實際。

+0

究竟什麼是你的問題?你想做什麼?跨度是否插入錯誤的地方? – Samy

+0

@Samy我想知道爲什麼代碼片段爲(var鍵在提交){if(key ==「parentNode」){myKeys.push(「{」+ key); myKeys.push(「」+ submit.key +「}」);}}'添加到'myKeys' {{parentNode,undefined}''而不是'{parentNode,[object HTMLDivElement]}' .push( 「{」 + 「parentNode」); myKeys.push(「」+ submit.parentNode +「}」); span.innerHTML = myKeys;' –

回答

3

的問題是在這裏:

submit.key 

您正在訪問的財產的節點對象的關鍵在這種情況下,與名關鍵沒有財產。


如果你想你必須做的訪問屬性parentNode:

submit[key] 

在這種情況下,變量關鍵的值被用作節點對象的屬性的名稱你想訪問。 (parentNode)


總之,標準的方法是做:

document.getElementById("submit").parentNode; 

或使用庫輕鬆地操作DOM元素(見http://jquery.com/

+0

太棒了!那就是我需要的! :) –