JQuery Wildcard用于在选择器中使用属性

时间:2013-04-10 19:21:54

标签: jquery-selectors wildcard jquery-attributes

我已经对这个主题进行了可扩展的研究,在假设我没有通配符之前,我要求作为最后的手段。

我需要从文档中提取所有文本输入元素并将其添加到数组中。但是,我只想添加具有id的输入元素。

我知道你在使用id(例如$(#\ S *))时可以使用\ S *通配符,但是我不能使用它,因为我只需要按文本类型过滤结果,所以我按属性搜索。

我目前有这个:

values_inputs = $("input[type='text'][id^='a']");

这是我想要的方式,但它只返回以'a'开头的文本输入元素。我希望所有文本输入元素都带有任何“id”。 我不能用:

values_inputs = $("input[type='text'][id^='']"); //or
values_inputs = $("input[type='text'][id^='*']"); //or
values_inputs = $("input[type='text'][id^='\\S*']"); //or
values_inputs = $("input[type='text'][id^=\\S*]"); 
//I either get no values returned  or a syntax error for these

我想我只是在SQL中为JQuery属性选择器寻找等价的*。 没有这样的事情,或者我只是以错误的方式处理这个问题?

4 个答案:

答案 0 :(得分:1)

你的逻辑有点含糊不清。我相信你想要任何 id的元素,而是id 等于空字符串的元素。使用它。

values_inputs = $("input[type='text']")
    .filter(function() { 
        return this.id != '';
     });

答案 1 :(得分:1)

尝试将选择器更改为:

$("input[type='text'][id]")

答案 2 :(得分:1)

实际上,这很简单:

var values_inputs = $("input[type=text][id]");

答案 3 :(得分:0)

我想出了另一种非常简单地使用外卡的方法。这对我帮助很大,所以我想我会分享它。

您可以通过以下方式在选择器中使用属性通配符来模拟使用'*'。假设您有动态生成的表单,其中使用相同的命名约定创建元素,除了动态更改表示索引的数字:

id='part_x_name' //where x represents a digit 

如果您只想检索具有id名称和元素类型的某些部分的文本输入,您可以执行以下操作:

var inputs = $("input[type='text'][id^='part_'][id$='_name']");

并且瞧,它将检索在id字符串开头有“part_”的所有文本输入元素,在字符串末尾有“_name”。如果您有类似

的内容
id='part_x_name_y' // again x and y representing digits
你可以这样做:

var inputs = $("input[type='text'][id^='part_'][id*='_name_']"); //the *= operator means that it will retrieve this part of the string from anywhere where it appears in the string. 

如果其他元素id在文档中具有类似的命名约定,则根据其他id的名称可能会开始变得有点棘手。您可能必须在指定通配符时更有创意。在大多数常见情况下,这足以满足您的需求。