Avatar billede tillebeck Nybegynder
05. november 2009 - 13:02 Der er 7 kommentarer og
1 løsning

jquery - indsætte et tag omkring et andet

Hej.

Jeg har brug for at finde et tag og så sætte noget html før det... hvordan gør man det med jquery? Her er det et li-tag, som skal indsættes omkring et ul-tag.

Eksempel
<div id="start">
  <ul>
    <li>stuff</li>
    <li>stuff</li>
    <li class = "ny_ul"> <-- Det er denne, som skal indsættes
      <ul>
        <li>stuff</li>
        <li>stuff</li>
      </ul>
    </li> <-- denne skal afslutte tag'et
  </ul>
</div>

Kan med denne sætte et linie ind EFTER den ul, som jeg forsøger at indsætte noget før... Tættere kan jeg ikke komme på.

    $("#start ul").prepend("<li class='ny_ul'>");
    $("#start ul").append("</li>");
Men dette fungerer ikke efter hensigten, da alt kommer inde i ulen og ikke uden om ul'en

What to do for at pakke et tag ind i et andet tag?
Avatar billede preppydude Nybegynder
05. november 2009 - 13:22 #1
Er det ikke noget lignende det her:

$("#start ul").parent().get(0).append("<p>test</p>");
Avatar billede tillebeck Nybegynder
05. november 2009 - 13:33 #2
Nej, jeg får det ikke til at sætte nogle <p>'er ind hos mig. Men er det ikke noget med .wrap, der skal bruges?
Avatar billede tillebeck Nybegynder
05. november 2009 - 13:38 #3
I det hele taget giver min kode i eksemplet slet ingen mening. Så spørgsmålet deles til to:
- hvordan wrapper man et tag i et andet tag, fx. sætter en <div> omkring en <ul>

Ikke wrap, men bare indsæt:
<ul>
  <li>1</li>
  <li>2</li>
  <li>3 <!-- her skal der sættes <b>stk</b> ind efter 3 -->
    <ul>
      <li>3-1</li>
    </ul>
  </li>
</ul>
Avatar billede tillebeck Nybegynder
05. november 2009 - 14:13 #4
Her er svar på, hvordan man kommer fra:
<div class="test">tekst</div>

og til:
<div class="test"><span>tekst</span></div>

via denne:
$(".test").wrapInner("<span></span>");



Nu mangler jeg bare at lære, at indsætte min linie kode det rigtige sted, som i eksemplet ovenfor
Avatar billede tillebeck Nybegynder
05. november 2009 - 14:27 #5
Til det andet spørgsmål har jeg prøvet at bruge dit forslag, preppydude. I en lidt modificeret version:

$(".start ul").parent().prepend("</li><li class='hasBeenInserted'>");

Men det bliver ikke indsat korrekt. Tror jeg giver op, og laver det i xslt i stedet.
Avatar billede preppydude Nybegynder
05. november 2009 - 16:53 #6
Jeg kan se på det når jeg engang kommer hjem i aften, hvis det er du kan vente. :)
Avatar billede virus Nybegynder
09. november 2009 - 09:51 #7
Kig på .before() og .after()
Avatar billede tillebeck Nybegynder
09. november 2009 - 11:10 #8
Her er koden:
$('#start').find('>li >ul').each(function() {
    $(this).wrap('<li class="ny_ul"></li>').parent().insertAfter($(this).parent().parent());
});

Den tager en ul med tre li'er og tilføjer en li (med class="ny_ul") samt flytter en nested ul til denne li. Det virker :-)

Input:
  <ul id="start">
    <li>1</li>
    <li>2</li>
    <li>3
      <ul>
        <li>3-1</li>
      </ul>
    </li>
  </ul>

Og returnerer:
  <ul id="start">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li class="ny_ul">
      <ul>
        <li>3-1</li>
      </ul>
    </li>
  </ul>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester