【问题标题】:jQuery not changing CSS even though element found in array?即使在数组中找到元素,jQuery 也不会更改 CSS?
【发布时间】:2015-12-01 22:43:45
【问题描述】:

如果这个问题不清楚,请提前道歉;我很新。

我正在开发一个 Chrome 扩展程序来更改 www.nytimes.com 上浏览次数最多的标题的颜色。我的问题是我无法让 jQuery 可靠地覆盖页面上的 CSS。

我正在使用一个函数来搜索页面上的所有锚点,将这些锚点的文本与标题数组进行比较,并在文本与其中一个标题匹配时修改 CSS。这是我所拥有的:

$("a").each(function() {
    $this = $(this);
    if ($.inArray($this.text(), titles) !== -1) {
      console.log("found title");
      $this.css('color', color);
    }
  });

console.log 语句用于测试,它确实表明我目前在我的页面上找到了 8 个匹配项。但是,只有四个匹配项应用了 CSS 颜色。被更改的四个标题都在页面的“通过电子邮件发送最多”部分。即使标题的文本相同,页面主体中的相应标题也不会更改。

我错过了什么?

【问题讨论】:

  • 所以,正如我在另一个回复中提到的,更改 CSS 的最后一行工作正常。我正在使用一个颜色变量并传入一个字符串。我可以把它改成“红色”、“#006600”之类的,它仍然只改变了一半的标题。
  • 我在 html 中注意到,在主文章中,锚标记中的文本之前可能有一个换行符,我没有选择。我已经搜索过了,但您似乎无法向 $.inArray 添加正则表达式(如果可以的话,我不知道该怎么做)。会这样吗?
  • 尝试将新的覆盖设置为 color !important
  • 尝试比较链接而不是标题上的文字
  • 你正在comapring .text() ,它必须是完全匹配的,或者在比较之前用trim() 或其他字符串格式化程序处理文本。

标签: javascript jquery css google-chrome-extension


【解决方案1】:

在这里尝试工作DEMO

$this.css('color', 'red');

并使用 .trim() 进行精确的字符串比较,

$this.text().trim()

【讨论】:

  • 感谢您的帮助,现在我看到了非常简单的解决方案!
【解决方案2】:

尝试替换此行

$this.css('color', color);

$this.css({color:'#006600'});

【讨论】:

  • 感谢您的回复。该行也适用(根据我的研究,您可以使用任何一种格式来更改 css)。仍然只更改了一半的标题。如果不清楚,我将颜色定义为变量,并且传入一个有效的字符串。
【解决方案3】:

检查您的 .css 文件。如果该文件包含如下内容:

someSelector {
 ... 
  ...
 color: "somecolor !important ";
 ... 

}

那么 jQuery 不能通过代码覆盖它。请先修改您的 css 文件,然后尝试使用代码进行设置。

【讨论】:

    猜你喜欢
    • 2016-04-19
    • 2021-12-17
    • 1970-01-01
    • 2022-01-24
    • 2018-06-04
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    相关资源
    最近更新 更多