Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JQuery unwrap content

Tags:

html

jquery

Within a CMS I am working on a blog. The HTML structure of the output for each post title looks like this:

<h2>
    <a href="...">Title</a>
</h2>

What I want to do is remove the <a> tag that wraps the content representing the blog title.

I did a bit of looking around and found 2 almost-solutions:

  1. remove() - this will remove the content itself too though
  2. unwrap() - I don't think you can target text within a tag with this to get rid of the tag itself.
like image 862
Marty Avatar asked Dec 09 '22 06:12

Marty


2 Answers

Use .wrapInner first and unwrap the new structure..

$('h2 a').wrapInner('<span>').children().unwrap();

Demo at http://jsfiddle.net/gaby/ffKDn/


Updating with a better way ..

Use the .contents() to target the text nodes and use .unwrap() on those..

$('h2 a').contents().unwrap();

Demo at http://jsfiddle.net/gaby/ffKDn/8/

like image 137
Gabriele Petrioli Avatar answered Dec 21 '22 23:12

Gabriele Petrioli


This would be achieved much more efficiently by editing the appropriate template within the CMS. But you can accomplish it with the following.

$(document).ready(function() {
    $('h2').each(function() {
       $(this).html($(this).children().html());
    });
});

See this JSFiddle example.

like image 39
cheeken Avatar answered Dec 21 '22 23:12

cheeken