将 class 应用于 <td>

Apply class to <td>

如何找到每个 <td> 元素中包含的 <p> 元素的 class 名称,然后将 class 添加到 <td> 元素的 class 列表?

<table>
    <tr>
        <td colspan="1">
            <p class="Hello_blue">Hello Stack Overflow1</p>
        </td>
        <td rowspan="1" colspan="2">
            <p class="Hello_red">Hello Stack Overflow2</p>
            <p class="Hello_red">defines red color,that class want to apply to</p>
        </td>
        <td rowspan="1" colspan="1">
            <p class="Hello_orange">Hello Stack Overflow3</p>
        </td>
    </tr>
</table>

<td> 个元素会有 class 个像这样的

<td rowspan="1" colspan="1" class="blue">...</td>
<td rowspan="1" colspan="1" class="red">...</td>
<td rowspan="1" colspan="1" class="orange">...</td>

Select 所有 <p> 元素是 <td> 元素的子元素,然后遍历并将每个 <p> 元素的 class 分配给其父元素元素.

(function(){
    window.onload = function() {
        "use strict";
        var paragraphs = document.querySelectorAll('td p'), paragraph, i;
        for(i = 0; (paragraph = paragraphs[i]); i++) {
            paragraph.parentNode.className += paragraph.className.replace('hello_','');
        }
    }
})();

您可以在 table 中搜索 p 标签,然后找到最接近的父 td 并指定 class 名称。

使用普通 Javascript:

// convert "Hello_blue" to "blue"
function convertClassName(src) {
    return src.replace(/^.*?_/, "");
}

var pTags = document.querySelectorAll("table p");
for (var i = 0; i < pTags.length; i++) {
    pTags[i].parentNode.className += " " + convertClassName(pTags[i].className);
}

工作演示:http://jsfiddle.net/jfriend00/6bvwu5qL/

使用jQuery:

// convert "Hello_blue" to "blue"
function convertClassName(src) {
    return src.replace(/^.*?_/, "");
}

$("table p").each(function() {
    $(this).closest("td").addClass(convertClassName(this.className));
});

工作演示:http://jsfiddle.net/jfriend00/36oejbx4/

在加载 DOM 之后,这些代码块中的任何一个都应该是 运行。这意味着您要么将它们放在文档末尾的脚本标记中,要么从直到 DOM 加载后才调用的函数中调用它们,或者从事件处理程序中调用它们(例如onload) 等待 DOM 被加载。