Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 3 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /selection/toString-user-select-none.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<meta charset="utf-8">
<title>Selection.toString() with user-select: none elements</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="test-content">
<!-- Test case 1: Basic user-select: none -->
<div id="basic">
a<span style="user-select: none;">b</span>c
</div>
<!-- Test case 2: Nested user-select: none -->
<div id="nested">
start <span style="user-select: none;">unselectable <strong>nested</strong>
text</span> end
</div>
<!-- Test case 3: Selectable children inside unselectable container -->
<div id="container" style="user-select: none;">
<span style="user-select: text;">selectable</span> unselectable
<span style="user-select: text;">text</span>
</div>
</div>
<script>
function selectAllAndGetSelectionTextInElement(element) {
const selection = getSelection();
selection.removeAllRanges();
const range = document.createRange();
range.selectNodeContents(element);
selection.addRange(range);
return selection.toString();
}
test(() => {
const result = selectAllAndGetSelectionTextInElement(document.getElementById('basic'));
assert_equals(result, 'ac',
'Basic user-select: none content should be excluded');
}, 'Selection.toString() excludes basic user-select: none content');
test(() => {
const result = selectAllAndGetSelectionTextInElement(document.getElementById('nested'));
assert_equals(result, 'start end',
'Nested user-select: none content should be excluded');
}, 'Selection.toString() excludes nested user-select: none content');
test(() => {
const result = selectAllAndGetSelectionTextInElement(document.getElementById('container'));
assert_equals(result, 'selectabletext',
'Selectable children should be included even in unselectable container');
}, 'Selection.toString() includes selectable children in unselectable ' +
'container');
</script>