Как я могу заставить этот код работать в IE? - PullRequest
1 голос
/ 01 октября 2009

На моей HTML-странице много таблиц. Когда пользователь наводит курсор на таблицу, она должна быть автоматически выбрана (событие onmouseover), чтобы пользователь мог скопировать (Ctrl + v) ее в буфер обмена. Я искал способ в stackoverflow и получил следующий код. Но это работает только в Firefox (window.getSelection () не работает в IE). Как я могу заставить его работать в IE?

  var prevRange = null;

  function s(node) {
    var s = window.getSelection();
    var r = document.createRange();
    r.selectNode(node);
    if (prevRange) {
      s.removeRange(prevRange);
    }
    s.addRange(r)
    prevRange = r;
  }

По неизвестной причине я не могу использовать s.removeAllRanges () в FF. Выдает ошибку «неверный ярлык». хммм.

Кроме того, есть ли способ программно скопировать выбранный код в буфер обмена?

Спасибо.

Sam

Ответы [ 5 ]

1 голос
/ 01 октября 2009

Следующая функция будет делать то, что вы хотите. Нет необходимости в jQuery.

Я не видел проблем с removeAllRanges в Firefox. Вам нужно предоставить больше кода для иллюстрации проблемы.

Вы не сможете скопировать выбор пользователя непосредственно в буфер обмена, как отмечено в другом ответе. Большинство браузеров по праву не позволяют этого.

function selectElement(el) {
    var sel, range;

    // IE branch
    if (document.body.createTextRange) {
        range = document.body.createTextRange();
        range.moveToElementText(el);
        range.select();
    } 

    // DOM compliant browsers
    else if (window.getSelection && document.createRange) {
        sel = window.getSelection();
        range = document.createRange();
        range.selectNodeContents(el);
        sel.removeAllRanges();
        sel.addRange(range);
    }
}
0 голосов
/ 01 октября 2009

Относительно getSelection на это ответил Дж. Стин,

var s;
if (window.getSelection) {
    s = window.getSelection();
}
else if (document.selection) {
    s = document.selection.createRange();
}

Что касается программного копирования выбранного текста в буфер обмена, это не работает в Firefox по соображениям безопасности. Есть некоторые обходные пути, но конечный пользователь должен изменить некоторые настройки. Апплеты Java можно использовать для программного копирования текста в Firefox (однако апплеты Java не являются хорошим решением).

0 голосов
/ 01 октября 2009

Это только для того, чтобы показать, какой метод использовать, когда в IE и при использовании других браузеров, это далеко не полное решение и содержит по крайней мере одну логическую ловушку.

var s;
if (window.getSelection) {
    s = window.getSelection();
}
else if (document.selection) {
    s = document.selection.createRange();
}

s должен быть текстовым диапазоном в IE, в то время как он остается объектом выбора в браузерах на основе Mozilla.

Информация найдена здесь: http://www.quirksmode.org/dom/range_intro.html

Редактировать: отредактировано для уточнения. =)

0 голосов
/ 01 октября 2009

Эта - хорошая статья, объясняющая различия в диапазонах между наиболее распространенными браузерами и дающая вам полезные советы по их преодолению.

0 голосов
/ 01 октября 2009

Возможно, стоит использовать библиотеку, такую ​​как jQuery, чтобы помочь справиться с особенностями браузера. Его достаточно просто использовать, если вы знаете базовый JavaScript.

http://jquery.com/

...