在多个属性

时间:2017-12-27 17:14:53

标签: javascript jquery

我试图抓取目标div的结束数字,替换并加入两个属性(js-data-reveals),并在末尾添加该数字(_1)。

我知道它与我用来替换属性的正则表达式有关,但我无法弄明白。

希望你能提供帮助。



$('#js-form-group-UPLOAD_DOCUMENT_ID_1').find('input').each(function() {
  var attrName = 'js-data-reveals';
  var $el = $(this);
  //Get Last Digit from ID
  var idNumber = $el.attr('id').match(/\d+$/);
  var attrs = $el.attr(attrName);
  //Split the two attributes in js-data-reveals
  var data = attrs.split(',').map(function(item) {
    return item.replace(/.{0}$/, function(idNumber) {
      return idNumber
    });
  });
  $el.attr(attrName, data.join(','));
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="js-form-group-UPLOAD_DOCUMENT_ID_1">
  <fieldset>
    <input type="file" class="form-control" id="UPLOAD_DOCUMENT_ID_1"
           js-data-driven="true"
           js-data-reveals="DOCUMENT_TYPE,UPLOAD_DOCUMENT_DESCRIPTION">
  </fieldset>
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

match()返回一个数组。

可以使用attr(attrName, function)

简化此操作

$('input[js-data-reveals]').attr('js-data-reveals', function(_, existing) {
  var idNumber = this.id.match(/\d+$/)[0];
  return existing.split(',').map(function(s) {
    // replace number if it already exists or add it if it doesn't
    return s.match(/_\d+$/) 
           ? s.replace(/\d+$/, idNumber)
           : s += '_' + idNumber;
  }).join();
});


console.log($('#UPLOAD_DOCUMENT_ID_1').attr('js-data-reveals'))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="js-form-group-UPLOAD_DOCUMENT_ID_1">
  <fieldset>
    <input type="file" 
       class="form-control" 
       id="UPLOAD_DOCUMENT_ID_1" 
       js-data-driven="true" 
       js-data-reveals="DOCUMENT_TYPE,UPLOAD_DOCUMENT_DESCRIPTION_999">
  </fieldset>

</div>

答案 1 :(得分:0)

删除&#39; +&#39;在你的正则表达式中:

var idNumber = $el.attr('id').match(/\d$/);

&#39; +&#39;使正则表达式与给定字符匹配1次或更多次,因此\ d + $将匹配12345在&#39; d12345&#39;中。由于您只想匹配最后一位数字,因此请删除&#39; +&#39;将使它按预期工作。