使用通配符选择自定义值

时间:2015-05-08 21:12:56

标签: javascript jquery jquery-selectors

在这个小提琴中,我试图选择属性值。因此,elems var应包含值listen,submitClicked& listen,textEntered

http://jsfiddle.net/adrianfiddleuser/g2Rxc/128/

来源:

<input tag="listen,submitClicked" id="click" type="submit" value="click"/>
<input tag="listen,textEntered" id="test" type="textbox" value="test"/>

var elems = $('p[^listen]')

console.log(elems)

但是通配符似乎不起作用。如何选择以&#34; listen&#34;开头的自定义值并将这些值添加到数组?

2 个答案:

答案 0 :(得分:2)

您没有正确使用^=属性选择器。您需要指定tag属性:

p[tag^=listen]
  

[att^=val]

     

表示具有att属性的元素,其值以前缀“val”开头。如果“val”是空字符串,则选择器不代表任何内容。

     

- W3C's Selectors Level 3

此外,tag不是有效的HTML属性,您可能需要考虑使用a data-* attribute

答案 1 :(得分:0)

正如@JamesDonnelly正确地指出tag属性实际上是无效的(尽管它会起作用)。此外,在开始扩展js时,在属性值中使用逗号分隔值会使事情变得更难。

根据我的例子,我认为按照以下方式构建HTML会更好:

<input data-listen="submitClicked" id="click" type="submit" value="click"/>
<input data-listen="textEntered" id="test" type="textbox" value="test"/>

选择&#34; listen&#34;会很简单:

$('[data-listen]');

检查侦听特定内容的元素或查找每个元素侦听的内容也更容易,而不必解析您的tag属性中的字符串。

$('[data-listen]').each(function() {
    console.log('I listen for ' + $(this).data('listen'));
});
var $listensForSubmit = $('[data-listen="submitClicked"]');
相关问题