DOMの要素に最短のテキストゲッター/セッターを書き込む


8

jQueryのと同様$.fn.textに、要素のテキストを取得および設定できる1つまたは2つの関数を記述します。

あなたは使用することはできませんtextContentinnerTextさえ少ない、とinnerHTML

プレーンなJavaScript。DOMライブラリはありません。主要なブラウザで動作する必要があります。(古いIEを気にする必要はありません。)

最短のコードが勝ちます。

楽しい!


関数名は合計にカウントされますか?
Shmiddty 2013

うん。私はあなたの関数を自分のページに入れてすぐに使用できるはずです。しかし、それは誰にとっても同じ制限であるはずなので、それは誰にとっても不公平だというわけではありません。
Florian Margaine、2013

1
つまり、1文字の関数名です。とった。
Shmiddty 2013

@Shmiddtyまた、関数宣言がないことは、再帰を使用したい人にとって不公平です。
Florian Margaine、2013

回答:


4

JavaScript(167)

function t(e,h,f){if(h||h==''){while(f=e.lastChild)e.removeChild(f);e.appendChild(document.createTextNode(h))}h=e.data||'';for(c in f=e.childNodes)h+=t(f[c]);return h}

使用法 :

var textContent = t(yourElement); // get the text content
t(yourElement, ''); // clear
t(yourElement, newText); // sets a new text

グローバル名前空間の汚染がないことに注意してください

デモ、マルチレベルDOMツリーといくつかのテスト


if('split' in h)
Shmiddty 2013

@Shmiddtyこれは、関数のユーザーが何かを渡さないようにしundefinedます。
DenysSéguret2013

コードゴルフSEカウンターは218ではなく175文字を報告します。なぜですか?
John Dvorak

@JanDvorakこのカウンターはどこですか?ここが初めてです...
DenysSéguret

1
他の人が使用できるヒント::-) dataより短いnodeValue。非ゴルフバージョンも投稿できますか?
Florian Margaine、2013

2

JavaScript(175)

function t(e,v,f){if(!v&&v!=''){v=e.data||'';for(c in f=e.childNodes)v+=t(f[c]);return v}else{ while(c=e.lastChild)e.removeChild(c);e.appendChild(document.createTextNode(v))}}

私は@dystroyよりも道徳性がかなり低いので、varを気にしませんでした。私はスコープfをしなければならなかったし、いくらか賢くしました。

そうは言っても、私たちの答えはかなり似ており、それについてより良い方法がたくさんあるとは思えません。

コレクション認識あり(173)

function t(e,v){if(!v&&v!=''){v=e.data||'';for each(c in e.childNodes)v+=t(c);return v}else{ while(c=e.lastChild)e.removeChild(c);e.appendChild(document.createTextNode(v))}}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.