Взгляните на спецификацию DOM Range . Вы можете получить Range
из пользовательского выбора в Firefox, используя:
var range = window.getSelection().getRangeAt(0);
Обратите внимание, что некоторые браузеры, включая Firefox, допускают множественный выбор, доступ к которому можно получить с помощью метода выбора getRangeAt()
.
Range
выражается через DOM-узлы и смещения в этих узлах. После того, как вы получили Range
, сделать то, что вы хотите, не так просто, поскольку границы диапазона могут находиться в разных узлах на разных уровнях дерева DOM, поэтому простое окружение содержимого Range тегом не всегда возможно , Возможно, вы сможете сделать что-то вроде следующего, хотя это создаст новый элемент блока, который будет содержать выбранный контент:
var range = window.getSelection().getRangeAt(0);
var selectionContents = range.extractContents();
var div = document.createElement("div");
div.style.color = "yellow";
div.appendChild(selectionContents);
range.insertNode(div);
Другая, хакерская, альтернатива - это использование execCommand()
метода document
, чтобы изменить выделение (например, установив для него определенный цвет), а затем с помощью document.querySelectorAll
или некоторой библиотеки селектора, чтобы выбрать элементы с этим цветом а затем примените к ним стиль.