Viết getter / setter văn bản ngắn nhất trên một phần tử cho DOM


8

Giống như jQuery $.fn.text, viết một hoặc hai hàm có thể nhận và đặt văn bản trên một phần tử.

Bạn không thể sử dụng textContenthoặc innerText, và thậm chí ít hơn innerHTML.

Javascript đơn giản. Không có thư viện DOM. Nó phải làm việc trên các trình duyệt lớn. (Không cần quan tâm đến IE cũ.)

Mã ngắn nhất sẽ thắng.

Thưởng thức!


tên hàm sẽ được tính vào tổng số?
Shmiddty

Vâng. Tôi sẽ có thể đặt chức năng của bạn trong trang của tôi và sử dụng nó ngay lập tức. Nhưng nó phải là giới hạn giống nhau cho tất cả mọi người, vì vậy nó không giống như bất công với bất cứ ai.
Florian Margaine

1
Vì vậy, một tên chức năng chữ cái. Hiểu rồi.
Shmiddty

@Shmiddty Ngoài ra, không có khai báo hàm sẽ không công bằng cho những người muốn sử dụng đệ quy.
Florian Margaine

Câu trả lời:


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}

Sử dụng :

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

Lưu ý rằng không có ô nhiễm của không gian tên toàn cầu

Trình diễn , với cây DOM đa cấp và một vài thử nghiệm


if('split' in h)
Shmiddty

@Shmiddty Điều đó sẽ buộc người dùng chức năng vượt qua một cái gì đó không undefined.
Denys Séguret

Bộ đếm mã golf SE báo cáo 175 ký tự, không phải 218. Tại sao nó lại như vậy?
John Dvorak

@JanDvorak quầy này ở đâu? Đây là lần đầu tiên của tôi ở đây ...
Denys Séguret

1
Gợi ý mà người khác có thể sử dụng: datangắn hơn nodeValue:-). Bạn có thể đăng phiên bản không chơi golf không?
Florian Margaine

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))}}

Tôi có đạo đức ít hơn đáng kể so với @dystroy, vì vậy tôi không bận tâm đến var . Tôi đã phải phạm vi f mặc dù, và tôi đã làm điều đó một cách khéo léo.

Điều đó nói rằng, câu trả lời của chúng tôi khá giống nhau, và tôi không chắc có nhiều cách tốt hơn để đi về nó.

Với nhận dạng bộ sưu tập (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))}}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.