Цитата:
Цитата:
Цитата:
Я еще раз проверил в разных браузерах. Я очень всматривался пытаясь увидеть разницу. И ее нет. Вероятно вы используете старый вариант. Я же приводил исправленный вариант уже: var TextNode = { each: function(callback, parent) { for (var childNodes = (parent || document.body).childNodes, i = 0; i < childNodes.length; i++) { var I = childNodes[i]; I.nodeType == 1 ? arguments.callee(callback, I) : I.nodeType == 3 && callback(I, i); } } }; window.onload = function() { TextNode.each(function(noda) { var v = noda.nodeValue.replace(/(http\:\/\/www\.youtube\.com\/watch\?v\=[0-9a-z]{11})/gi, '<a href="$1">$1</a>'); if (v != noda.nodeValue) { var div = document.createElement('div'); div.innerHTML = v; if (div.firstChild) { var f = document.createDocumentFragment(); do f.appendChild(div.firstChild); while (div.firstChild); noda.parentNode.replaceChild(f, noda); } } }); }; |
Riim,
Цитата:
|
Цитата:
Цитата:
window.onload = function() { var callback = function(noda) { var v = noda.nodeValue.replace(/(http\:\/\/www\.youtube\.com\/watch\?v\=[0-9a-z]{11})/gi, '<a href="$1">$1</a>'); if (v != noda.nodeValue) { var div = arguments.callee.div; div.innerHTML = v; if (div.firstChild) { var f = arguments.callee.fragment; do f.appendChild(div.firstChild); while (div.firstChild); noda.parentNode.replaceChild(f, noda); } } }; callback.div = document.createElement('div'); callback.fragment = document.createDocumentFragment(); TextNode.each(callback); }; Странно, что после строки "var f = arguments.callee.fragment;" не нужно отчищать этот самый фрагмент. Видимо после добавления в документ он сам очищается. |
Riim, речь шла о сравнении innerHTML с nodeValue
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>blank</title> <script type="text/javascript"> var TextNode = { each: function(callback, parent) { for (var childNodes = (parent || document.body).childNodes, i = 0; i < childNodes.length; i++) { var I = childNodes[i]; I.nodeType == 1 ? arguments.callee(callback, I) : I.nodeType == 3 && callback(I, i); } } }; window.onload = function() { TextNode.each(function(noda) { var div = document.createElement('div'); div.innerHTML = noda.nodeValue.replace(/(http\:\/\/www\.youtube\.com\/watch\?v\=[0-9a-z]{11})/gi, '<a href="$1">$1</a>'); if (div.firstChild && div.innerHTML != noda.nodeValue) { var f = document.createDocumentFragment(); do f.appendChild(div.firstChild); while (div.firstChild); noda.parentNode.replaceChild(f, noda); } }); }; </script> </head> <body> text <p> alone </body> </html> Цитата:
p.s. кто-нибудь может что-то сказать про экономию операторов, кроме Riim, он уже вроде высказался по этому поводу |
Цитата:
|
Цитата:
Цитата:
|
Zeroglif, а с производительностью это как-то связано? Или вопрос стиля?
|
Цитата:
|
Цитата:
Цитата:
Цитата:
Я давно определился и уже объяснял как именно. Я говорю про: 1) производительность 2) объем кода 3) логичность кода 4) читабельность Приоритеты меняются в зависимости от кода. В TextNode.each на первом месте производительность (универсальный код). В window.onload объем кода (одноразовый код). Читабельность всегда на последнем. Почему именно такой порядок, я уже объяснял (с примерами) выше. Например, объяснял, как из-за не оптимизированного универсального кода появляются проблемы с производительностью, т. к. рано или поздно, он все равно становится узким местом в приложении. Оптимизация одного часто делается в ущерб остальному. Вопрос в том, насколько эффективна эта оптимизация, и каков ущерб. Дмитрий предложил вариант оптимизации производительности в ущерб объему кода. Ущерб слишком большой, а выигрыш в скорости мизерный (теоретически, не тестировал). Вариант предложенный Zeroglif (с проверкой до regexp-а), даст заметно большее увеличение производительности и меньший ущерб. Вполне приемлемый вариант. Во всех случаях выше, где я отходил от своих приоритетов, я пояснял, почему это делаю. В случае с предложенным Дмитрием вариантом, я пояснил, что делаю это просто что бы попробовать идею. Надеюсь, что на этот раз я все достаточно подробно изложил, и вопросов на счет моих приоритетов больше не будет. Цитата:
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 13:05. |