【问题标题】:jQuery Pass parameter to filter statement with contains clausejQuery将参数传递给带有包含子句的过滤语句
【发布时间】:2010-02-10 17:23:25
【问题描述】:

在下面的方法中,我可以在带有 bar 类的 div 中搜索文本 foo 并在其中包含的文本下划线:

function UnderlineText() {
    $(".bar").filter(":contains(foo)").css("text-decoration", "underline");
}

但我想将参数传递给方法,而不是包含字符串 foo。

我已经尝试了各种排列,如上一个关于已弃用的.contains 的问题中所见

但我无法让它工作。

实现这一目标的最佳方法是什么?

function UnderlineText(searchText) {
    $(".bar").filter(":contains(*searchText*)").css("text-decoration", "underline");
}

【问题讨论】:

    标签: jquery filter


    【解决方案1】:
    function UnderlineText(searchText) {
        $(".bar").filter(":contains("+searchText+")").css("text-decoration", "underline");
    }
    

    会解决问题。

    【讨论】:

    • 是的,这很好用,谢谢。一定是我的单引号和双引号组合阻止了它为我工作。
    【解决方案2】:

    即使您设法使选择器正常工作,您也会选择整个包含元素(p、span、div 等),因此使用简单的css() 调用最终会为整个文本块添加下划线。要强调特定部分,您必须使用以下内容:

    function underline(query) {
      $('.bar').filter(':contains("' + query+ '")').each(function() {
        var html = $(this).html();
        html = html.replace(query, '<span style="text-decoration: underline">' + query + '</span>';
        $(this).html(html);
      });
    }
    

    这仍然不是那么好,因为它可能会在查询位于属性或类似的位置时替换查询,但这是朝着分别加下划线的方向迈出的一步。

    【讨论】:

    • 嗯,我当然认为这非常好。也许有一个更优雅的解决方案,但只强调搜索的文本是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 2017-09-07
    • 2020-10-02
    • 2010-12-02
    • 2013-03-16
    • 2012-05-09
    相关资源
    最近更新 更多