2016-10-20 10 views
1

domで作業している間に、私はの結果と同じ方法でdocument.createElement();のオブジェクトと扱われると仮定したところで、setAttribute()を呼び出すことができました。なぜdocument.createTextNode()はsetAttribute()を許可しないのですか?

例:

var genericElementNode = document.createElement('p'); 
genericElementNode.setAttribute('id', 'sampleId1'); 
// The above will run fine 


var textNode = document.createTextNode("Hello World"); 
textNode.setAttribute('id', 'sampleId2'); 
//The above will result in an error: 
//Uncaught TypeError: textNode.setAttribute is not a function 

なぜこのような場合は?また、回避策はありますか?

+5

テキストノードは要素ではないため、[プロトタイプ]が異なります(https://developer.mozilla.org/docs/Web/API/Node)。 --- 'setAttribute'は' HTMLElement'のメソッドで、 'textNode'は継承しません。 – evolutionxbox

+0

_ "回避策はありますか?" _最終目標は何ですか? –

+0

@evolutionxboxそれを答えに展開できればそれは優れているはずです。また、textNodeがそのように名前が付けられているにもかかわらず、なぜ「ノード」ではないのか、ご存じですか?なぜそれはもっと適切なものと呼ばれていないのですか? – Rugnir

答えて

0
あなたが設定カント

/textNodeの属性/要素

は回避策があるのいずれかを取得しますか?

それはspanような内部の要素を作成すると言うと、まさにそのテキスト

var genericElementNode = document.createElement('p'); 
genericElementNode.setAttribute('id', 'sampleId1'); 
// The above will run fine 


var textNode = document.createElement("span"); 
textNode.innerText = "Hello World"; 
textNode.setAttribute('id', 'sampleId2'); 
1

document.createTextNode戻り... Nodeから継承テキスト・ノードを設定するのは簡単です。これにはsetAttributeメソッドがありません。 document.createElementを使用して作成することができ

Element、またNodeから継承しますが、それはまた、setAttributeなど、さらにたくさんの方法があります。 @Mamdouh Freelancerとして


は、あなたの代わりに、このようなspanとインラインレベル要素を使用することができ、述べています。

var textNode = document.createElement('span'); 
textNode.textContent = 'Hello world'; 
textNode.setAttribute('id', 'sampleId2'); 
関連する問題