Powiedzmy mam tekst znaku, takie jak:Jak wyłączyć zaznaczanie części tekstu w div?
I chciałbym, aby wyłączyć wybierając taki sposób, że początek lub koniec zaznaczenia nie jest w znaku. Dlatego też wszystkie te pozycje powinny być możliwe:
Z drugiej strony, te pozycje powinny być wyłączone:
Do tej pory próbowałem tylko za pomocą kilku prostych css,
mark {
-khtml-user-select: all;
-webkit-user-select: all;
-o-user-select: all;
user-select: all;
}
This is <mark>marked text</mark>. I want to disable selecting only part of <mark>marked text</mark>.
Czy istnieje jakiś sposób, aby to zrobić? Każda odpowiedź będzie doceniona!
Osiągnąłem to, co chciałem, więc udostępniam je tutaj.
function checkSelection() {
var sel = window.getSelection();
var marks = document.getElementsByTagName('mark');
for(var i = 1; i < sel.rangeCount; i++) {
sel.removeRange(sel.getRangeAt(i));
}
var range = sel.getRangeAt(0);
var startnode = range.startContainer;
var endnode = range.endContainer;
for (var i = 0; i < marks.length; i++) {
\t if (marks[i].contains(startnode)) {
range.setStartBefore(startnode);
}
\t if (marks[i].contains(endnode)) {
range.setEndAfter(endnode);
}
}
}
document.addEventListener('mouseup', checkSelection)
document.addEventListener('touchend', checkSelection)
This is <mark>marked text</mark>. I want to disable selecting only part of <mark>marked text</mark>.
Nie widzę żadnego prostego sposobu robienia tego. Będziesz musiał przeanalizować tekst, użyć zdarzeń myszy, dodać klasy itp. – kemotoe
Możesz zgłosić kilka raportów o błędach i mieć nadzieję, że dostawcy przeglądarki to naprawią. https://drafts.csswg.org/css-ui-4/#valdef-user-select-all "Jeśli selekcja zawiera część elementu, wówczas wybór musi zawierać cały element, w tym wszystkich jego potomków" - nie mówi nic o tym, że wybrane musi zaczynać się od kliknięcia (które mówi nam MDN) –
Co do części "Czy jest jakikolwiek sposób to zrobić", zobacz https://stackoverflow.com/questions/985272/selecting- text-in-an-element-akin-to-highlighting-with-your-mouse (yes) –