我已经对这个主题进行了可扩展的研究,在假设我没有通配符之前,我要求作为最后的手段。
我需要从文档中提取所有文本输入元素并将其添加到数组中。但是,我只想添加具有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属性选择器寻找等价的*。 没有这样的事情,或者我只是以错误的方式处理这个问题?
答案 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的名称可能会开始变得有点棘手。您可能必须在指定通配符时更有创意。在大多数常见情况下,这足以满足您的需求。