05.05.2014, 22:43
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
реализация getText
в jQuery функция getText реализована так
getText = Sizzle.getText = function( elem ) {
var node,
ret = "",
i = 0,
nodeType = elem.nodeType;
if ( !nodeType ) {
// If no nodeType, this is expected to be an array
while ( (node = elem[i++]) ) {
// Do not traverse comment nodes
ret += getText( node );
}
} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
// Use textContent for elements
// innerText usage removed for consistency of new lines (jQuery #11153)
if ( typeof elem.textContent === "string" ) {
return elem.textContent;
} else {
// Traverse its children
for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
ret += getText( elem );
}
}
} else if ( nodeType === 3 || nodeType === 4 ) {
return elem.nodeValue;
}
// Do not include comment or processing instruction nodes
return ret;
};
у меня получилось так, работает во всех браузерах, что я упустил, зачем в jquery настолько длинная реализация?
function getText ( elem ) {
var props = ["textContent", "innerText", "data"],
text;
for( var i = 0; i < props.length; i++ ){
if( (text = elem[props[i]]) !== undefined )
return text;
}
}
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
05.05.2014, 23:06
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
cyber,
так нет обхода всех элементов внутри искомого и что вернёт если ничего нет
|
|
05.05.2014, 23:09
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Ну вон там комментарий, что innerText коверкает переходы на новую строку. Хотел подробнее почитать про этот баг #11153, но не нашел закладку issues на странице проекта в GitHub
Сообщение от cyber
|
["textContent", "innerText", "data"]
|
Могу ошибаться, но вроде data deprecated, надо использовать nodeValue
|
|
05.05.2014, 23:28
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от cyber
|
зачем в jquery настолько длинная реализация?
|
мб всё это результат багфиксов.
Ты можешь выяснить, что и куда там менялось, с помощью команды git.
А заодно и глянуть, как оно смотрелось в самом начале - при первичной реализации
|
|
06.05.2014, 00:06
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
__________________
Гейзенберг, возможно, читал этот тред.
|
|
06.05.2014, 03:35
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от Octane
|
Могу ошибаться, но вроде data deprecated, надо использовать nodeValue
|
нигде не видел, что оно устаревшее
http://learn.javascript.ru/basic-dom...го-узла
Цитата:
|
Свойство nodeValue=null для узла SCRIPT, так как это узел-элемент. А вот data=undefined. Это единственное различие в поведении этих свойств.
|
Сообщение от рони
|
и что вернёт если ничего нет
|
исправил
Сообщение от рони
|
так нет обхода всех элементов внутри искомого
|
это и не нужно http://jsfiddle.net/a7VbA/4/
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
06.05.2014, 03:42
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
короче в итоге пришел к выводу что если не нужна поддержка древних ишаков (ие 8 -), то достаточно textContent и не нужно нечего городить
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
06.05.2014, 03:44
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от Дзен-трансгуманист
|
Node.textContent #Differences from innerText
|
это только для ие меньше 9
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
06.05.2014, 04:35
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Сообщение от cyber
|
нигде не видел, что оно устаревшее
|
Кажется на MDN такую пометку видел, но сейчас не нашел, но в Firefox и IE:
data – это геттер в Text.prototype.__proto__ , а nodeValue – геттер в Node.prototype , так как
Text.prototype instanceof Node → true
то чтобы охватить больше видов узлов, лучше использовать nodeValue
Последний раз редактировалось Octane, 06.05.2014 в 04:50.
|
|
06.05.2014, 11:00
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Приведу реализацию "getText" из ангуляра:
text: (function() {
var NODE_TYPE_TEXT_PROPERTY = [];
if (msie < 9) {
NODE_TYPE_TEXT_PROPERTY[1] = 'innerText'; /** Element **/
NODE_TYPE_TEXT_PROPERTY[3] = 'nodeValue'; /** Text **/
} else {
NODE_TYPE_TEXT_PROPERTY[1] = /** Element **/
NODE_TYPE_TEXT_PROPERTY[3] = 'textContent'; /** Text **/
}
getText.$dv = '';
return getText;
function getText(element, value) {
var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType];
if (isUndefined(value)) {
return textProp ? element[textProp] : '';
}
element[textProp] = value;
}
})()
Иными словами, если IE<9 не нужен, достаточно
element.textContent
согласно реализации выше
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 06.05.2014 в 11:02.
|
|
|
|