selectNode и surroundContents в Safari
Есть функция wrap(узел, имя_тега [, сторона]):
var wrap = function(ie) { return ie ? function(node, tag, side) { return node.applyElement(document.createElement(tag), side); } : function(node, tag, side) { var range = document.createRange(), wrapper = document.createElement(tag); range[side == 'inside' ? 'selectNodeContents' : 'selectNode'](node); range.surroundContents(wrapper); return wrapper; }; }(/*@cc_on 1 @*/); 3-й параметр может быть «inside» или «outside» (по умолчанию). Safari и Chrome почему-то ничего не делают, если используется метод selectNode, т.е. когда 3-й параметр не указан или имеет значение «outside». Google выдает кучу ссылок на страницы, где написано что в Opera и Safari исправили какие-то баги, большинство еще 2006 года, связанные с selectNode, но что конкретно там не работало так и не нашел. Решение конечно есть: var wrap = function(ie) { return ie ? function(node, tag, side) { return node.applyElement(document.createElement(tag), side); } : function(node, tag, side) { var wrapper = document.createElement(tag); if(side == 'inside') { var range = document.createRange(); range.selectNodeContents(node); range.surroundContents(wrapper); } else { node.parentNode.insertBefore(wrapper, node); wrapper.appendChild(node); } return wrapper; }; }(/*@cc_on 1 @*/); Но хотелось бы разобраться, что не так с selectNode, может-быть кто-нибудь решал подобную задачу? В каких версиях Firefox, Safari и Opera может быть ошибка при использовании selectNode, selectNodeContents и surroundContents в данном контексте? ------------------- Еще выяснилось, что Opera очень медленно работает с этими методами :( |
Часовой пояс GMT +3, время: 17:19. |