CreateTextRange не работает в Chrome
В этом коде createRange
не работает в Chrome. В IE он работает. Пожалуйста, помогите, как исправить это. Есть ли какое-либо другое свойство для работы, например создание диапазона. Так что это будет полезно для моего проекта.
<script language=javascript>
var isSelected;
function markSelection ( txtObj ) {
if ( txtObj.createTextRange ) {
txtObj.caretPos = document.selection.createRange().duplicate();
isSelected = true;
}
}
function insertTag ( txtName, enclose ) {
if(document.f_activity_email == null) {
var tag = document.getElementById('EmailTokenID').value;
}
else {
var formC = document.f_activity_email;
var tag = formC.EmailTokenID.value;
}
var closeTag = tag;
if ( enclose ) {
var attribSplit = tag.indexOf ( ' ' );
if ( tag.indexOf ( ' ' ) > -1 )
closeTag = tag.substring ( 0, attribSplit );
}
if ( isSelected ) {
var txtObj = eval ( "document.forms[0]." + txtName );
if (txtObj.createTextRange && txtObj.caretPos) {
var caretPos = txtObj.caretPos;
caretPos.text = ( ( enclose ) ? "<"+tag+">"+caretPos.text+"</"+closeTag+">" : tag+caretPos.text );
markSelection ( txtObj );
if ( txtObj.caretPos.text=='' ) {
isSelected=false;
txtObj.focus();
}
}
} else {
// placeholder for loss of focus handler
}
}
Ответы
Ответ 1
CreateTextRange - это специальная функция Microsoft, но есть легкая работа.
Используйте createRange
вместо этого, как в этом сообщении, например:
if (document.selection) { //IE
var range = document.body.createTextRange();
range.moveToElementText(document.getElementById(containerid));
range.select();
} else if (window.getSelection) { //others
var range = document.createRange();
range.selectNode(document.getElementById(containerid));
window.getSelection().addRange(range);
}
Ответ 2
createTextRange только в IE.
Посмотрите на этот
http://help.dottoro.com/ljrvjsfe.php
Ответ 3
У меня возникла проблема с node JSDOM и codemirror (которая пытается использовать document.createRange)
Это происходит потому, что document.createRange(chrome) не существует ATM в JSDOM, и поэтому он пытается использовать document.body.createTextRange(IE) вместо этого.
Чтобы исправить это, мне пришлось заглушить функцию document.createRange в моей настройке unit test следующим образом:
global.document.createRange = () => {
return {
setEnd: () => {},
setStart: () => {},
getBoundingClientRect: () => {}
}
}
Говорят о полифонии JSDOM document.createRange:
См. https://github.com/tmpvar/jsdom/issues/399
На момент написания этого еще не произошло.