2016-08-23 55 views
0

我有一个文本输入的列表,其值基于某些选择输入的值进行操作。两组输入有具有平行结构的ID,如:如何使用jQuery获取属性值并从结果中提取子串

<select id="foo-dog-bar>, <input type="text" id="foo-dog-baz> 
<select id="foo-cat-bar>, <input type="text" id="foo-cat-baz> 
<select id="foo-fish-bar>, <input type="text" id="foo-fish-baz> 
<select id="foo-bird-bar>, <input type="text" id="foo-bird-baz> 

为了能够找到匹配的文本输入,我需要搜索与对应ID的选择输入。在上面的例子中,这是中间有相同动物名称的ID。

这里是我到目前为止,我的问题是怎么办的criteria变量:

jQuery('select[id$="-points"]').change(function() { 

    var value = jQuery(this).val(), 
     arr = ['cat', 'dog', 'fish', 'bird'], 
     criteria = jQuery(this)..., // whichever string in arr its ID contains 
     bar = jQuery(this).parent().find('#foo-'+criteria+'-bar').val(); 

    // do stuff... 

}); 

如何搜索的this的ID为包含arr数组中的字符串,使该字符串criteria变量?在搜索这种类型的东西时我能找到的唯一东西是检索数组项目的索引,但是这对我并没有帮助。我想要实际的字符串。

在此先感谢。

+2

当然,我不会要求你张贴HTML,但我真的不明白你的问题,和你写了”不是个没有它就清除。 – Marc

+1

_此外,如果你不想发布你的html,那么这里的HTML确实不相关,用伪代码创建一个[mcve](http://stackoverflow.com/help/mcve)。如果你不想这样做,不要在这里问一个问题 – baao

+0

道歉,我意识到我最初遗漏了一个关键信息。我编辑了这个问题,试图更加清晰和详细。如果您有更具体的问题,请告诉我什么不清楚。总的HTML结构真的与我无关。如有必要,我可以发布它,但是当我将它发布到与此类似的问题中时,它只会分散注意力,导致答案偏离正轨。在这种情况下,我只想知道如何在可能的字符串数组中搜索输入的ID作为字符串,并将该字符串设置为“criteria”变量。 – cjl750

回答

1
  1. 以选择HTML标签的ID属性值

    criteria = jQuery(this).attr('id'); // just call an .attr('id'); 
    
  2. 要通过ID与jQuery选择元素 - 就像用纯JS(JavaScript的),你不需要内嵌套找到元素元件ID是每个DOM/PAGE一个唯一的元件

    jQuery('#foo-'+criteria+'-bar').val(); 
    
  3. 可以使用分裂函数从字符串得到值:

    criteria = criteria.split('foo-')[1].split('-baz')[0];

完整的示例:

jQuery('select[id$="-points"]').change(function() { 
     var value = jQuery(this).val(), 
     arr = ['cat', 'dog', 'fish', 'bird']; 
     criteria = jQuery(this).attr('id'); 
     criteria = criteria.split('foo-')[1].split('-baz')[0]; // get the value you want using split() function 
     bar = jQuery('#foo-'+criteria+'-bar').val(); 
     // do other stuff... 
    }); 
+0

谁给了我一个负分 - 在这里评论的原因。 – SergeDirect

+0

感谢您的建议,但这并不能帮助我,因为我不能像您那样使用'criteria'变量。我需要根据它们的ID具有相同的字符串匹配两个元素;仅通过其ID标识一个元素是无益的。我将编辑这个问题来澄清。 – cjl750

+0

谢谢你的注意,我纠正了我的答案。 – SergeDirect