Tara Irvine
Tara Irvine

Reputation: 819

how can i remove a character from a class?

I want to remove x_ from every id and every class in a ol. This ol is generated from a form field so I can't get access to it.

if I save the field value in a variable, how can i remove these characters?

Here's some of my jQuery

var itemValue = $("#ItemDescription").val();
console.log(itemValue);
$("body #demo ol.sortable").html(itemValue);

HTML content of (#itemDescription)

<li class="x_menu-item">
<div>Menu Item</div>
<ol>
    <li style="display: list-item;" class="x_no-nest" id="x_menu-item0">
    <div><a href="/_webapp_3915457/Portfolio1">Portfolio1</a></div>
    </li>
    <li style="display: list-item;" class="x_no-nest" id="x_menu-item1">
    <div><a href="/_webapp_3915468/Portfolio10">Portfolio10</a></div>
    </li>
    <li style="display: list-item;" class="x_menu-item">
    <div>Menu Item</div>
    <ol>
        <li style="display: list-item;" class="x_no-nest" id="x_menu-item3">
        <div><a href="/_webapp_3923732/Portfolio12">Portfolio12</a></div>
        </li>
    </ol>
    </li>
    <li style="display: list-item;" class="x_no-nest" id="x_menu-item2">
    <div><a href="/_webapp_3923731/Portfolio11">Portfolio11</a></div>
    </li>
</ol>
</li>
<li style="display: list-item;" class="x_no-nest" id="x_menu-item4">
<div><a href="/_webapp_3914327/Portfolio2">Portfolio2</a></div>
</li>
<li style="display: list-item;" class="x_no-nest" id="x_menu-item5">
<div><a href="/_webapp_3915633/Portfolio3">Portfolio3</a></div>
</li>
<li style="display: list-item;" class="x_no-nest" id="x_menu-item6">
<div><a href="/_webapp_3915649/Portfolio4">Portfolio4</a></div>
<ol>
</ol>
</li>
<li style="display: list-item;" class="x_no-nest" id="x_menu-item7">
<div><a href="/_webapp_3915635/Portfolio5">Portfolio5</a></div>
</li>
<li class="x_no-nest" id="x_menu-item8">
<div><a href="/_webapp_3915658/Portfolio6">Portfolio6</a></div>
</li>
<li class="x_no-nest" id="x_menu-item9">
<div><a href="/_webapp_3915650/Portfolio7">Portfolio7</a></div>
</li>
<li class="x_no-nest" id="x_menu-item10">
<div><a href="/_webapp_3915354/Portfolio8">Portfolio8</a></div>
</li>
<li class="x_no-nest" id="x_menu-item11">
<div><a href="/_webapp_3915356/Portfolio9">Portfolio9</a></div>
</li>

I also want to replace it into the textarea value when I'm done but I can do that myself. I just need help with the removal of "x_"

Thanks!! :)

Upvotes: 3

Views: 366

Answers (2)

Niklas
Niklas

Reputation: 30002

You can remove all the "x_" from the ID's with simply using the callback function of attr:

$("#ItemDescription li").attr('id',function(i,e){
   if (typeof e != "undefined" && e.substring(0,2)=="x_") return e.substring(2);
});

example: http://jsfiddle.net/niklasvh/Rfq2n/

If you only have 1 class attached per element, like in your example, you can do the same with the classes:

$("#ItemDescription li").attr('id',function(i,e){
   if (typeof e != "undefined" && e.substring(0,2)=="x_") return e.substring(2);
}).attr('class',function(i,e){
   if (typeof e != "undefined" && e.substring(0,2)=="x_") return e.substring(2);
});

example: http://jsfiddle.net/niklasvh/Rfq2n/6/

In case there may be multiple classes, and the "x_" class isn't the first one, you could do this:

$("#ItemDescription li").attr('id',function(i,e){
   if (typeof e != "undefined" && e.substring(0,2)=="x_") return e.substring(2);
}).attr('class',function(i,e){
    if (typeof e != "undefined"){
        if (e.split(" ").length && e.substring(0,2)=="x_")  return e.substring(2);
        var classes = "";
        $.each(e.split(" "),function(i,b){
            if (b.substring(0,2)=="x_") classes +=  " "+b.substring(2);
            else   classes +=  " "+b;
        });  
        return $.trim(classes);
    }
});

example: http://jsfiddle.net/niklasvh/Rfq2n/16/

In that case, use the solution mentioned in the comment below by steve.

Upvotes: 5

kapa
kapa

Reputation: 78731

This will take care of the IDs:

$('#itemDescription *').attr('id', function (i, old) {
    if (old.match(/^x_/)) {
        return old.replace(/^x_/, '');
    }
});

jsFiddle Demo

Upvotes: 3

Related Questions