jQuery 如何像 SQL 的 LIKE 查询一样在元素中搜索文本?

3
你好,有没有一种方法可以在DOM中搜索文本,就像我们对SQL查询LIKE一样?
我的意思是,我有。
<ul>
<li>ab</li>
<li>abrecot</li>
<li>abus</li>
<li>aby</li>
<li>abrea</li>
</ul>

我想搜索"abre",并按照文本的升序返回结果:
<li>abrea</li>
<li>abrecot</li>

这是可能的吗?
肯定,查询看起来像是这样做:
SELECT <li> FROM <ul> WHERE text LIKE 'abre%' ORDER BY text ASC; :))

1
这不是重复的,但这可能会给你一些想法:https://dev59.com/uW435IYBdhLWcg3wlRMf - Kiley Naro
它在数组中搜索元素,但是它搜索的是%text%,我想要搜索text% :P - itsme
3个回答

6

如果你正在寻找文本以特定字符串开头的元素,则可以使用filter方法:

var x = $("ul li").filter(function() {
    return $(this).text().substr(0, 4) === "abre";
});

这将只返回以字符串“abre”开头的元素。使用contains方法的其他答案将返回包含字符串的元素,其与您的伪SQL查询不匹配。
这里有一个上述内容的工作示例

1
很棒的答案。这个答案在功能上等同于你在问题中列出的SQL查询。 - Kiley Naro
1
哇,所以如果“abre”是用户输入的内容,我需要放置var q = $(input).val(); var x = $(“ul li”)。filter(function(){ 返回$(this).text()。substr(0,q.length)=== q; }); 对吗? - itsme
只是更具体一点,你能展示一下如何返回一个由过滤后克隆元素组成的数组吗? :P - itsme
1
.filter(function() { ... }).clone(); 将会克隆匹配的元素集合。 - James Allardice
嘿,伙计:P 再次抱歉,你能看一下这段代码吗?因为我无法在过滤和克隆后打印<a>元素,而当我将它们放入HTML中时,虽然可以在console.log中看到它们,但没有任何输出:P - itsme
显示剩余3条评论

5
我认为你需要使用jQuery中的'contains'函数,可以在这里查看文档: http://api.jquery.com/contains-selector/ 你的示例代码可能如下所示:
$("li:contains('abre')")

如果您正在寻找“以...开头”的内容,可以使用以下语法在元素上实现:

$('li[anAttribute^="abre"]')

但是这个假设基于你有一个可查询的属性,我认为你可能没有这个属性,这种情况下,使用筛选器可能更适合你的需求。

太棒了,我也在这里阅读:https://dev59.com/p3E95IYBdhLWcg3wp_gg - itsme
1
这将返回包含该字符串的元素(无论字符串出现在哪里),但操作者希望只返回以该字符串开头的元素。 - James Allardice
但是我担心的是,这个搜索会查找%text%,而我希望搜索text% :P - itsme
我理解你的观点,他的伪查询也表明了这一点,但是当我阅读他的文本时,它说“搜索“abre””,我认为这是检查元素内是否存在字符串,而不是特定以某个字符串开头。 - dougajmcdonald

4
":contains()选择器可能是您要查找的内容:

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

引用:

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>

<div>John Resig</div>

<div>George Martin</div>
<div>Malcom John Sinclair</div>
<div>J. Ohn</div>


<script>
$("div:contains('John')").css("text-decoration", "underline");
</script>

</body>
</html>

这将返回包含字符串的元素,但是OP只想要以该字符串开头的元素。 - James Allardice
把文本从以前的搜索包含内容改成搜索“以...开始”的内容(文本%),不知道这会不会有同样的效果。 - itsme

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接