Jquery或Javascript-Regex通过ID匹配元素,并使用类似ID更改其他元素

Jquery或Javascript-Regex通过ID匹配元素,并使用类似ID更改其他元素,javascript,jquery,ruby-on-rails,regex,Javascript,Jquery,Ruby On Rails,Regex,每个do循环都在rails表单上创建一些html。 循环创建带有ID(如foo_1_blah、foo_2_blah)的复选框,以及ID中具有类似开头和匹配数字的其他元素 使用通配符,当其中一个匹配的复选框被更改时, 如果该复选框的ID匹配: /福乌1_*/ 我想。隐藏一些匹配的输入框: /福尤巴尔克斯_*/ /福乌1_巴里_*/ 我不想隐藏复选框。在某些语言中,我会这样做 /foo\u\n_*/ 然后我就可以用1美元得到号码并匹配 /foo_$1_barx*/ /foo_u$1_ubary*/

每个do循环都在rails表单上创建一些html。 循环创建带有ID(如foo_1_blah、foo_2_blah)的复选框,以及ID中具有类似开头和匹配数字的其他元素

使用通配符,当其中一个匹配的复选框被更改时, 如果该复选框的ID匹配:

/福乌1_*/

我想。隐藏一些匹配的输入框:

/福尤巴尔克斯_*/

/福乌1_巴里_*/

我不想隐藏复选框。在某些语言中,我会这样做

/foo\u\n_*/

然后我就可以用1美元得到号码并匹配

/foo_$1_barx*/

/foo_u$1_ubary*/

。。。但不知道如何在jQuery或javascript中使用dom树遍历实现这一点。 如果有一种方法可以标记Rails表单以启用此功能,那么也可以使用。

在jQuery中,我相信$input:not:checkbox[id |=foo_1_bar]。hide可以使用


这是选择所有不是复选框:not:checkbox且id以foo_1_bar[id |=foo_1_bar]开头的输入标记。我不认为你可以使用通配符,但是css选择器可以给你更多的灵活性。看看css选择器的更多信息。

我结合了jQuery和Javascript的正则表达式来解决这个问题。在这里:

.change检测组合了jquery选择器,仅检测对相关复选框的更改。Javascript用于从复选框的-ID字段中提取数字,并构建用于ID选择我想要隐藏的文本div的字符串。它们实际上是输入框,但在任何情况下都与ID匹配

我没有找到一种方法来使用regex选择div并依次切换它们,例如:

var matchString='input:not:checkbox[id^=foo_'+myNumber+''u]' $matchString.toggle

这似乎只匹配一个实例-复选框,然后根据“not”忽略它; 我为每个与ID匹配的div使用了一个切换行来解决这个问题

这里有一个很好的console.log输出分解,用于检查进度

脚本:

$(function(){
  $("input[type='checkbox'][id^='foo_']").change(function(){

    foundID = $(this).attr('id')
    console.log('We Found ID ' + foundID);

    var myMatch =  foundID.match(/foo_(\d+)_barx*/);
    var myNumber = myMatch[1]
    console.log('We Found Number ' + myNumber);

    var matchStringA = '#foo_' + myNumber + '_baz'
    var matchStringB = '#foo_' + myNumber + '_bay'  
    console.log('JQ ID String To Match ' + matchStringA + ' and ' + matchStringB);

    $(matchStringA).toggle()
    $(matchStringB).toggle()
  });
});
HTML:


嗨,Joseph,你可以试试这样的正则表达式:。这样可以避免复选框-谢谢。现在,如何匹配1、2等,并将它们应用于隐藏,以匹配特定复选框的相应元素。我不完全确定您的意思。你会有类似和相应的东西,然后想隐藏foo_1_baz并用foo_1_bar做些什么,隐藏foo_2_baz并用foo_2_bar做些不同的事情吗?
<input type="checkbox" id="foo_1_bar"/>

<div id="foo_1_baz">
Toggle This Visibility With Checkbox #1 Change
</div>

<div id="foo_1_bay">
Toggle This Visibility With Checkbox #1 Change
</div>

<input type="checkbox" id="foo_2_bar"/>

<div id="foo_2_baz">
Toggle This Visibility With Checkbox #2 Change
</div>

<div id="foo_2_bay">
Toggle This Visibility With Checkbox #2 Change
</div>