开发者

Add CSS class to generated <a> and <span> tag by their text

I have following generrated HTML, and I want to add some CSS class to them from client-side with jQuery.

I'd like to add CSS class "user-active" to the following "" tag that has the text "Active"

<a id="ctl00_ContentPlaceHolder1_lvStudent_ctrl5_lnkStatus">Inactive</a>
<a id="ctl00_ContentPlaceHolder1_lvStudent_ctrl6_lnkStatus">Active</a>
<a id="ctl00_ContentPlaceHolder1_lvStudent_ctrl7_lnkStatus">Inactive</a>

I'd like to add CSS class "user-inactive" to the following "" tag that has the text "Inactive"

<span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl5_lblStatus">Inactive</span>
<span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl4_lblStatus">Active</span>
<span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl6_lblStatus">Active</span>

Thanks.

Updated HTML output inside the container:

<table cellspacing="1" class="time-sheet" id="TimeSheet">
<thead>
<tr>
    <td>
    </td>
    <td colspan="5">
    </td>
</tr>
<tr>
    <th>
        <a href="#">Name</a>
    </th>
    <th>
        <a href="#">Id</a>
    </th>
    <th>
        <a href="#">User name</a>
    </th>
    <th>
        <a href="#">Status</a>
    </th>
</tr>
</thead>
<tbody>
<tr>
    <td>
         Charlie Sansa
    </td>
    <td>
         210
    </td>
    <td>
        charlieb
    </td>
    <td>
        <span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl0_lblStatus">Active</span>
    </td>
</tr>
<tr>
    <td>
         Rai Ninga
    </td>
    <td>
         211
    </td>
    <td>
        raiw
    </td>
    <td>
        <span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl1_lblStatus">Inactive</span>
    </td>
</tr>
<tr>
    <td>
         Sokcheng Ima
    </td>
    <td>
         212
    </td>
    <td>
        sokchengu
    </td>
    <td>
        <span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl2_lblStatus">Active</span>
    </td>
</tr>
<tr>
    <td>
         Khamkhong Ying
    </td>
    <td>
         213
    </td>
    <td>
        khamkhongt
    </td>
    <td>
        <span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl3_lblStatus">Active</span>
    </td>
</tr>
<tr>
    <td>
         Monica Seth
    </td>
    <td>
         214
    </td>
    <td>
        monicat
    </td>
    <td>
        <span id开发者_开发问答="ctl00_ContentPlaceHolder1_lvStudent_ctrl4_lblStatus">Active</span>
    </td>
</tr>
<tr>
    <td>
         Andrew Donut
    </td>
    <td>
         215
    </td>
    <td>
        andrewm
    </td>
    <td>
        <span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl5_lblStatus">Inactive</span>
    </td>
</tr>
<tr>
    <td>
         Jarn Maras
    </td>
    <td>
         216
    </td>
    <td>
        jarnt
    </td>
    <td>
        <span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl6_lblStatus">Active</span>
    </td>
</tr>
<tr>
    <td>
         Juliette Buran
    </td>
    <td>
         217
    </td>
    <td>
        juliettec
    </td>
    <td>
        <span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl7_lblStatus">Inactive</span>
    </td>
</tr>
<tr>
    <td>
         Sattaporn Lovin
    </td>
    <td>
         218
    </td>
    <td>
        sattapornw
    </td>
    <td>
        <span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl8_lblStatus">Active</span>
    </td>
</tr>
<tr>
    <td>
         Surachard Karach
    </td>
    <td>
         219
    </td>
    <td>
        surachards
    </td>
    <td>
        <span id="ctl00_ContentPlaceHolder1_lvStudent_ctrl9_lblStatus">Active</span>
    </td>
</tr>
</tbody>
</table>


If you had a container to restrict the search you could up the performance quite a bit, so this will work in all cases:

$("a, span").addClass(function() {
  switch($.text([this])) {
    case "Active": return "user-active";
    case "Inactive": return "user-inactive";
  }
});

But something like this would make it much faster, by narrowing it down to looking at only <a> and <span> elements you care about:

$("#TimeSheet").find("a, span").addClass(function() {
  switch($.text([this])) {
    case "Active": return "user-active";
    case "Inactive": return "user-inactive";
  }
});

We're just using .addClass() in both cases to add the class based on the exact text, not a substring match. You could also map this in an object, for example:

var classes = { "Active":"user-active", "Inactive":"user-inactive" };
$("#TimeSheet").find("a, span").addClass(function() {
  return classes[$.text([this])];
});
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜