Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> unwrap w czystym js
d4ng
post
Post #1





Grupa: Zarejestrowani
Postów: 191
Pomógł: 4
Dołączył: 7.03.2010

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
d4ng
post
Post #3





Grupa: Zarejestrowani
Postów: 191
Pomógł: 4
Dołączył: 7.03.2010

Ostrzeżenie: (0%)
-----


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?

Ten post edytował d4ng 23.12.2015, 14:03:10
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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/

Ten post edytował darko 23.12.2015, 14:06:06
Go to the top of the page
+Quote Post
d4ng
post
Post #5





Grupa: Zarejestrowani
Postów: 191
Pomógł: 4
Dołączył: 7.03.2010

Ostrzeżenie: (0%)
-----


a skąd ten skrypt ma wiedzieć że mam wywalić klasę "ltr" z elmentu <p>? widziałem ten skrypt (IMG:style_emoticons/default/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?

Ten post edytował d4ng 23.12.2015, 15:01:05
Go to the top of the page
+Quote Post
Comandeer
post
Post #6





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Polecam lekko podrasowaną wersję tego kodu: https://jsfiddle.net/Comandeer/1op3ae4c/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:36