0

我已经广泛研究了这个主题,并且在假设我想做的事情没有通配符之前,我作为最后的手段提出了要求。

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

我知道您可以在使用 $(#\S*) 等 id 选择器时使用 \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

4 回答 4

1

你的逻辑有点模棱两可。我相信您想要具有任何id 的元素,而是想要 id 不等于空字符串的元素。用这个。

values_inputs = $("input[type='text']")
    .filter(function() { 
        return this.id != '';
     });
于 2013-04-10T19:26:02.567 回答
1

尝试将您的选择器更改为:

$("input[type='text'][id]")
于 2013-04-10T19:31:12.857 回答
1

其实,很简单:

var values_inputs = $("input[type=text][id]");
于 2013-04-10T19:31:21.373 回答
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 的名称可能会开始变得有点棘手。在指定通配符时,您可能需要更有创意。在最常见的情况下,这足以满足您的需求。

于 2013-04-29T14:29:02.317 回答