【问题标题】:Changing the colour of a specific word throughout an HTML table更改整个 HTML 表格中特定单词的颜色
【发布时间】:2012-06-03 21:37:18
【问题描述】:

我有一个 HTML 表格,其中在整个表格的各个单元格中都使用了“yes”一词。我想在整个表格中将“是”的颜色更改为绿色。现在我显然可以将所有“是”词放在一个跨度标签中并给它一个类,将一种样式应用于该类,但我必须在每个是的词周围放置一个跨度标签......肯定在那里一定是一种节省空间和精力的方法吗?

【问题讨论】:

  • “是”是唯一的词吗?即<td>yes</td>?这可以使用 JavaScript DOM 遍历 + CSS 来完成。
  • 如果是容器中唯一的东西,那么只需将样式应用于容器。如果它是较长字符串的一部分,那么您唯一的选择是将其包装在一个跨度中,这将成为新的容器。
  • 谢谢大家,我想最简单的方法是将所有 yes 文本包装在 span 标签中并将类应用于它
  • 确保您接受最适合您的答案(不一定是我的 ;-)。

标签: javascript html css


【解决方案1】:

只是在 JS 中猜测

var tables = document.getElementsByTagName('td');
for(var i = 0; i < tables.length; i++)
{
    var s = tables[i].innerHTML;
    s = s.replace('yes', '<span style="color:green">yes</span>');
    tables[i].innerHTML = s;
}

【讨论】:

  • 我认为您仍然需要将s 放回innerHTML 中才能正常工作。类似tables[i].innerHTML = tables[i].innerHTML.replace('yes', '&lt;span style="color:red"&gt;yes&lt;/span&gt;');
  • @Tyrsius 谢谢,我认为它是指向内部 html 的指针,我猜:D
  • 如果它出现在标签中,例如在类属性中,这也将替换 yes。
【解决方案2】:

如果你使用 jquery,你可以使用类似的东西:

$('#tableID')
  .find('td')
    .each(function () {
      if ($(this).html() == 'yes') {
        $(this).addClass('MyClass');
      }
    });

仅当“是”或您在字符串中输入的任何内容是该 &lt;td&gt; 的整个 html 内容时才有效

【讨论】:

    【解决方案3】:

    jQuery 拥有美妙的 :contains 选择器:

    http://api.jquery.com/contains-selector/

    $("td:contains('yes')").css("color", "red");
    

    【讨论】:

    • 将为td中的每个文本着色
    • 它应该是绿色而不是红色。 ;-)
    • &lt;/table&gt; 之后与$("td:contains('yes')").css("color", "blueviolet"); 合作。在&lt;table&gt;之前,它不起作用。
    【解决方案4】:

    实现此目的的唯一方法是将每个单词包装在一个跨度中,并对其应用样式以使颜色变为绿色。您可以使用如下的正则表达式快速找到页面中的所有“是”词:

     /(?<!-)(\byes\b)(?!([^<]+)?>)(?!-)/ig
    

    这将找到 html 标记之外的所有“是”字。所以最终的代码是这样的:

    $('td').each(function(){
       $(this).html(
            $(this).html()
           .replace(
                  /(?<!-)(\byes\b)(?!([^<]+)?>)(?!-)/ig, 
                 '<span style="color:green;">$1</span>'
            )
        );
    });
    

    正则表达式的解释:

    中间部分(\byes\b) 匹配作为子表达式的“是”的整个单词。正则表达式的第一位(?&lt;!-) 称为lookbehind,而正则表达式的最后一位(?!([^&lt;]+)?&gt;)(?!-) 称为lookahead。基本上它说找到我所有的单词“yes”,这些单词没有跟在一些非'&lt;' 字符和'&gt;' 之后,并且后面没有连字符。这些外观可防止正则表达式匹配出现在标记或其属性中以及出现在连字符中的任何“是”。 i 和 g 是标志,表示搜索不区分大小写(因此它匹配“是”和“是”),并使搜索全局(匹配字符串中的所有实例)。在替换字符串中,$1 是一个反向引用,表示在此处插入第一个匹配的子表达式,在本例中是匹配字符串中出现的单词“yes”。

    【讨论】:

    • 如果您的 HTML 恰好在其属性中包含带有“yes”的标签?
    • 试试看,这个正则表达式会忽略那些。
    • 你能解释一下正则表达式吗?对我这样的初学者很有帮助。 $1 是做什么的?适用于yesterday 但不适用于yes-terday
    • 昨天或昨天不应该匹配。在 rubular.com 上尝试一下,看看您是否遇到了这个问题。我在回答中添加了解释,希望对您有所帮助。
    • 啊,你说得对,昨天确实失败了。 \b 将匹配连字符。
    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2021-12-01
    • 2013-11-03
    • 1970-01-01
    • 2019-11-16
    • 2016-06-13
    • 2013-01-02
    相关资源
    最近更新 更多