Skip to main content

Jquery html tag replace



Is there a way to replace, with Jquery, this:







<ul class="sub-menu">

<li><a href="#">Link</a></li>

</ul>







to this:







<div class="under">

<p><a href="#">Link</a></p>

</ul>







Parent element is: <ul id="menu">


Comments

  1. You could unwrap the a element and then wrap it in the new elements:

    $(".sub-menu").find("a").unwrap().unwrap().wrap("<div class='under'>").wrap("<p>");


    The two calls to unwrap remove the li and then the ul, and the two calls to wrap add the div and the p. Note that we have to wrap the div first, then the p.

    Here's a working example (inspect the DOM in the results window to see what you end up with).

    Note that I'm assuming the closing ul was meant to be a closing div tag in your second example!

    Edit

    You could also combine the two calls to wrap, which should be faster:

    $(".sub-menu").find("a").unwrap().unwrap().wrap("<div class='under'><p></p></div>");


    Another edit

    Using unwrap twice seemed a little messy to me. Now that I've had a little spare time I've thrown together a simple plugin that allows you to unwrap multiple ancestor elements from a target element. I've called it unwrapUntil, and you can find it on GitHub. It will work for any number of unwraps, and using it in this specific case would probably be a bit extreme, but it would allow us to do the following:

    $(".sub-menu").find("a").unwrapUntil(2).wrap("<div class='under'><p></p></div>");

    ReplyDelete
  2. you could use the replace with but you would need to build up the html eg:

    $('li').replaceWith('<p><a href="#">Link</a></p>');


    JQuery Ref

    ReplyDelete
  3. var newdiv = $("<div></div>")
    newdiv.addClass("under")
    $(".sub-menu a").each(function(){
    newdiv.append("<p></p>").find("p:last").append(this)
    })
    $(".sub-menu").replaceWith(newdiv)


    http://jsfiddle.net/QLkS5/

    ReplyDelete

Post a Comment

Popular posts from this blog

[韓日関係] 首相含む大幅な内閣改造の可能性…早ければ来月10日ごろ=韓国

div not scrolling properly with slimScroll plugin

I am using the slimScroll plugin for jQuery by Piotr Rochala Which is a great plugin for nice scrollbars on most browsers but I am stuck because I am using it for a chat box and whenever the user appends new text to the boxit does scroll using the .scrollTop() method however the plugin's scrollbar doesnt scroll with it and when the user wants to look though the chat history it will start scrolling from near the top. I have made a quick demo of my situation http://jsfiddle.net/DY9CT/2/ Does anyone know how to solve this problem?

Why does this javascript based printing cause Safari to refresh the page?

The page I am working on has a javascript function executed to print parts of the page. For some reason, printing in Safari, causes the window to somehow update. I say somehow, because it does not really refresh as in reload the page, but rather it starts the "rendering" of the page from start, i.e. scroll to top, flash animations start from 0, and so forth. The effect is reproduced by this fiddle: http://jsfiddle.net/fYmnB/ Clicking the print button and finishing or cancelling a print in Safari causes the screen to "go white" for a sec, which in my real website manifests itself as something "like" a reload. While running print button with, let's say, Firefox, just opens and closes the print dialogue without affecting the fiddle page in any way. Is there something with my way of calling the browsers print method that causes this, or how can it be explained - and preferably, avoided? P.S.: On my real site the same occurs with Chrome. In the ex