【问题标题】:JQuery "contains" returns nothing for html encodingJQuery“包含”对 html 编码不返回任何内容
【发布时间】:2012-01-07 02:38:03
【问题描述】:
var foundin = $('*:contains("the")').last();

在页面上工作,但是

var foundin = $('*:contains("&copy")').last();

不返回任何内容,即使 '&copy' 确实出现在页面源中。我尝试转义“&”,但这也不起作用。有没有办法使用 contains 来查找页面中的 html 编码字符?

基本上,我想做的是找到包含©的元素并对其进行解析以获取版权所有者。我在这里用正则表达式问了一个类似的问题:select HTML text element with regex?

【问题讨论】:

  • 将 & 替换为 &这将完全匹配。

标签: javascript jquery html encoding


【解决方案1】:

又快又脏:

var $div = $("<div>");

$.expr[":"].containsEnc = function(a, b, c, d) {
    var decoded = $div.html(c[3]).text(); // decode &copy to ©

    return ~a.textContent.indexOf(decoded); // does the element contain the character
};

那么你可以使用containsEnc作为选择器:

$('body:containsEnc("&copy")').html('ok');

不过,它可能不是最安全、性能最好的。

http://jsfiddle.net/wfLur/1/

【讨论】:

  • 你不觉得... &gt; -1比~...更清晰吗?只是一个想法。
  • @minitech: 可能,但由于~ 基本上从未使用过,它对我来说具有“包含”的含义......
  • 嗯,这确实有效,但它并不能真正帮助我完成我想做的事情,因为它返回包含 &copy 的最长 div 元素,我认为?我编辑了原始问题,我基本上是在尝试解析版权所有者。
  • @tarayani:不,事实上一点也不。 div 只是让浏览器解码&amp;copy 的临时工具。您可以使用选择器选择所有包含&amp;copy(或其他字符)的元素。
  • @tarayani:我猜这是一个与您的场景更相关的小提琴:jsfiddle.net/wfLur/6。您可以使用原始选择器,但使用 containsEnc 而不是 contains。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2015-09-04
  • 1970-01-01
  • 2019-09-02
  • 2016-03-30
相关资源
最近更新 更多