3
<div>Some reallllly
realllyyy long text</div>

将呈现为,Some reallllly realllyyy long text因为 HTML 删除了换行符。

但是由于换行符,我找不到div使用CSS 选择器::contains()

// Returns an empty array
$(':contains("Some reallllly realllyyy long text")');

有没有办法选择 div 并忽略换行符?

注意:我不想在选择器中添加换行符,我希望能够在div不知道有换行符的情况下选择越线)

4

2 回答 2

5

你可以做的是覆盖:contains选择器:

$.expr[":"].contains = $.expr.createPseudo(function(arg) {
    return function( elem ) {
        return $(elem).text().replace(/(\n)+/g, " ").indexOf(arg) >= 0;
    };
});

看到这个小提琴

使用这样的解决方案,您无需更改代码中的任何内容,只需添加这段代码即可。但这不是一个好习惯。
当然你可以用其他方式命名这个选择器。在这种情况下,您可以使用这两种行为:

$.expr[":"].mycontains

看到另一个小提琴

于 2013-07-11T09:39:39.523 回答
0

这个概念非常低效,我的回答也是:

$("div").each(function () {
    if ($(this).text()replace(/(\n)+/g, " ") == "Some reallllly realllyyy long text") {
        // Do something
        $(this).css({color: 'red'});
    }
});

请记住,浏览器恰好将一组空白字符呈现为单个空格。请重新考虑您的方法。

于 2013-07-11T09:32:35.280 回答