На странице есть форма с 
несколькими input и 
несколькими textarea. Нужно сделать две кнопки, при нажатии на которые текст, выделенный в данный момент в одном из этих элементов формы - менял бы свой регистр (верхний/нижний).
В опере это сделать просто:
function sToLow() { 
    var str, rng; 
    str = document.selection; 
    rng = str.createRange(); 
    rng.text=rng.text.toLowerCase(); 
}
- на соответствующую кнопку вешается срабатывание данной функции.
Но в фф это не работает.
В голову приходит только использовать 
selectionStart и 
selectionEnd у полей ввода в формах, но проблема в том что пользователь может выделить текст одновременно в нескольких полях ввода и нет
(?) возможности узнать какое выделение именно сейчас активно.
Ну ладно, с помощью события 
onfocus или 
onblur можно узнать какое из полей ввода было активно в последний раз. Но тогда возможны случайные срабатывания по сценарию:
- пользователь выделил текст, но потом потом убрал фокус (например кликнул мышкой на странице за пределами формы);
- затем он случайно нажимает по одной из кнопок, но подвоха в этом не видит (он ведь не держит в памяти, что где-то там текст остался выделен).
Избежать такого случайного срабатывания пришло на ум только с помощью события 
onmousedown на элементе 
body и установкой там переменной (мол, теперь нигде текст не выделен). Плюс, на случай если фокус снимается не мышкой, а TAB-ом, надо повесить ещё аналогичную установку этой переменной на событие 
onfocus элементов, предшествующих и следующих за нужными полями ввода.
В результате вроде всё должно работать как положено, но, блин, это же маразм какой-то и костыль на костыле получается (вместо простейшей функции, работающей в Опере). 
Может есть какой-то более правильный способ сделать то же самое? Фреймворки не предлагать.