jQuery选择器与asteriks

时间:2016-09-28 07:40:11

标签: javascript jquery

我在页面上有一些具有不同ID的多个单选按钮。根据选择的值,必须显示上传按钮或文本框。但是因为它几乎是相同代码的10倍(唯一的区别是数字)我正在寻找一个可以重用代码的解决方案。

两个无线电扫描示例:

<input type="radio" name="typePhoto2" id="foto2" value="photo"> 
<input type="radio" name="typePhoto2" id="video2" value="video">

<input type="radio" name="typePhoto3" id="foto3" value="photo"> 
<input type="radio" name="typePhoto3" id="video3" value="video">

我知道有一种方法可以使用带有*的jQuery来选择多个元素,但我想要的是使用'*'的值来提供选择的数字。

$("[id^=typePhoto]").click(function(){
        var value = [number after the id];
})

有办法做到这一点吗?否则,我必须复制10次相同代码的粘贴,只有一个数字作为差异。

5 个答案:

答案 0 :(得分:1)

您需要修复选择器以使用name属性值以typePhoto开头来定位所有元素。然后使用单击的元素上下文获取当前id并使用.replace()删除静态部分:

$("[name^=typePhoto]").click(function(){
    var value = this.id.replace("foto","").replace("video","");
});

工作代码段

$("[name^=typePhoto]").click(function(){
    var value = this.id.replace("foto","").replace("video","");
    console.log(value);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="radio" name="typePhoto2" id="foto2" value="photo"> 
<input type="radio" name="typePhoto2" id="video2" value="video">

<input type="radio" name="typePhoto3" id="foto3" value="photo"> 
<input type="radio" name="typePhoto3" id="video3" value="video">

答案 1 :(得分:1)

您始终可以通过事件对象获取当前目标的ID, 然后用一点正则表达式完成:

&#13;
&#13;
  
 $("[id^='foto']").click(function(e){
      var id = e.currentTarget.id
      var value = id.match(/[0-9]$/)[0];
      console.log(value)
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="radio" name="typePhoto2" id="foto2" value="photo"> 
<input type="radio" name="typePhoto3" id="foto3" value="photo">
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你可以尝试:

$('[id*="typePhoto"]')

$('input[type="radio"]');

干杯

答案 3 :(得分:0)

更好的方法是给他们所有相同的课程。例如class =&#34; photo-button&#34;。然后你可以使用:

$(".photo-button").click(function(){...})

答案 4 :(得分:0)

试试这个

$( "input[name*='typePhoto']" ).click( function(){
// your code
});