Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: unwrap w czystym js
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
d4ng
Witajcie chciałbym zapytać w jaki sposób moge usunąć z danego elementu wszystkie wrapy otaczające element potomny po klasie? Przykład:

  1. <p>
  2. <span class="bold">
  3. <span class="ltr">L</span>
  4. <span class="ltr">o</span>
  5. <span class="ltr">r</span>
  6. <span class="ltr">e</span>
  7. <span class="ltr">m</span>
  8. </span>
  9. <span class="ltr"> </span>
  10. <span class="ltr">i</span>
  11. <span class="ltr">p</span>
  12. <span class="ltr">s</span>
  13. <span class="ltr">u</span>
  14. <span class="ltr">m</span>
  15. </p>

chce osiągnąć:

  1. <p><span class="bold">Lorem</span> Ipsum</p>


Potrzebuje rozwiązania w czystym javascripcie..
Pozdrawiam smile.gif
darko
Proszę:

  1. <p>
  2. <span class="bold">
  3. <span class="ltr">L</span>
  4. <span class="ltr">o</span>
  5. <span class="ltr">r</span>
  6. <span class="ltr">e</span>
  7. <span class="ltr">m</span>
  8. </span>
  9. <span class="ltr"> </span>
  10. <span class="ltr">i</span>
  11. <span class="ltr">p</span>
  12. <span class="ltr">s</span>
  13. <span class="ltr">u</span>
  14. <span class="ltr">m</span>
  15. </p>
  16. var items = document.getElementsByClassName('ltr');
  17. var txt1 = ''; var txt2 = '';
  18. //document.createElement('p');
  19. var skip = false;
  20. for(var i = 0; i < items.length; i++) {
  21. if(items[i].innerHTML == ' ') {
  22. skip = true;
  23. continue;
  24. }
  25. if(skip) {
  26. txt2 += items[i].innerHTML;
  27. } else {
  28. txt1 += items[i].innerHTML;
  29. }
  30. }
  31.  
  32. var span = document.createElement('span');
  33. var spanText = document.createTextNode(txt1);
  34. span.appendChild(spanText);
  35. var spanAttr = document.createAttribute('class');
  36. spanAttr.value = 'bold';
  37. span.setAttributeNode(spanAttr);
  38.  
  39. var paragraph = document.createElement('p');
  40. paragraph.appendChild(span);
  41. var paragraphText = document.createTextNode(txt2);
  42. paragraph.appendChild(paragraphText);
  43. document.body.appendChild(paragraph);
  44. //console.log(txt1);
  45. //console.log(txt2);
  46. </body></html>
d4ng
Bardzo dziękuje, ale skrypt musi być dużo bardziej elastyczny tzn w elemencie <p> może być z 100 różnych innych elementów o róznych id czy klasach. A mi zależy żeby z tego worka <p> odwrapować elementy posiadające klasę "ltr".

w jquery prawdopodobnie wyglądałoby to tak:

  1. $("span.ltr").contents().unwrap();


ale jak to zrobić w czystym js?
darko
Zapewne analogicznie jak tutaj: https://plainjs.com/javascript/manipulation...dom-element-35/

// jeśli nie musisz fizycznie obrabiać zbioru elementów odpakowują pewne nadrzędne korzenie, to wystarczy Ci do tego metoda find: https://api.jquery.com/find/
d4ng
a skąd ten skrypt ma wiedzieć że mam wywalić klasę "ltr" z elmentu <p>? widziałem ten skrypt smile.gif
Ps. w jquery to już dawno bym sobie poradziła ale to musi być czysty js


  1.  
  2. var span = el.getElementsByClassName('ltr');
  3.  
  4. while(span.length) {
  5. var parent = span[ 0 ].parentNode;
  6. while( span[ 0 ].firstChild ) {
  7. parent.insertBefore( span[ 0 ].firstChild, span[ 0 ] );
  8. }
  9. parent.removeChild( span[ 0 ] );
  10. }
  11.  


może może?
Comandeer
Polecam lekko podrasowaną wersję tego kodu: https://jsfiddle.net/Comandeer/1op3ae4c/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.