Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

215
Views
How to get the window selection for nested nodes have shadow DOM

If we have nested elements with shadow DOM and try to get selection using. Is there any way to get the correct one for any selection includes cases like this? demo

window.getSelection() // incorrect selection
window.getSelection().getRangeAt(0).getClientRects() // DOMRectList {length: 0}

enter image description here

const main = document.querySelector('main');
const arr = "Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laudantium, eaque!".split(' ');
for (let i = 0; i < arr.length; i++) {
  const div = document.createElement('span');
  const shadowRoot = div.attachShadow({
    mode: 'open'
  });
  shadowRoot.appendChild(document.createTextNode(arr[i] + " "));
  main.appendChild(div);
}

const spans = [...document.querySelectorAll('.span-has-shadow')];
for (let i = 0; i < spans.length; i++) {
  const span = spans[i];
  const text = span.dataset.text;
  const root = span.attachShadow({
    mode: 'open'
  });
  root.appendChild(document.createTextNode(text + " "));
  if (i > 0) {
    const prev = spans[i - 1];
    prev.shadowRoot.appendChild(span);
  }
}
main>* {
  font-size: 1.5em;
  font-family: cursive;
}

main {
  margin: auto;
  width: 1000px;
}

#shadow-root {
  color: blue;
  margin-top: 1em;
}

h2 {
  text-align: center;
}
  <main></main>

  <h2>
    <span class="span-has-shadow" data-text="lorem">
      <span class="span-has-shadow" data-text="ipsum">
        <span class="span-has-shadow" data-text="dolor">
          <span class="span-has-shadow" data-text="sit">
            <span class="span-has-shadow" data-text="amet">
              <span class="span-has-shadow" data-text="consectetur">
                <span class="span-has-shadow" data-text="adipiscing">
                  <span class="span-has-shadow" data-text="elit">
                  </span>
                </span>
              </span>
            </span>
          </span>
        </span>
      </span>
    </span>
  </h2>

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!