1

У меня есть ВХОДНОЙ HTML тег типа, скрытый в view.It выглядит следующим образом:получить данных- значений атрибутов без элемента ид прохода HTML

 <input type="hidden" data-abc-value1="value1" data-abc-value2="value2" data-abc- 
     value3="value3"/> 

Я хотел бы получить значения DATA- атрибутов (данных -abc-value1, data-abc-value2, data-abc-value3), не передавая ему идентификатор элемента.

Могу ли я найти подходящие атрибуты данных-abc (которые являются общими) для элемента и получить его значения. Так что я могу избежать зависимости от идентификатора элемента, чтобы получить данные - * значение.

ответ

2

Попробуйте этот код, это может помочь вам

HTML

<input type="hidden" data-abc-value1="value1" data-abc-value2="value2" data-abc-value3="value3" /> 

Script

$('input[type="hidden"]').each(function(i, e){ 
    $.each(e.attributes, function(j,v){ 
     if(/^data-abc/.test(v.nodeName)) { 
      console.log(v.nodeName, v.nodeValue); 
     } 
    }); 
}); 

Demo JShttp://jsfiddle.net/UYNsw/

+0

спасибо .. я работаю как хотел – SCP

+0

Он действительно работает, но эффективен ли он? Это перемещает все скрытые входы и все их атрибуты в два вложенных eaches, поэтому сложность растет экспоненциально ... Почему бы не использовать какие-то уникальные идентификаторы для каждого ввода/записи, к которому он привязан? –

+0

Конечно, использование уникального идентификатора будет эффективным и повысить производительность, но @SCP по какой-то причине не хочет использовать идентификатор. Мое предложение будет, вместо того, чтобы пересекать все скрытые входы, используйте класс, по крайней мере, количество итераций может быть уменьшено. – moustacheman

1

Когда доступно jQuery, используйте функцию .attr(), чтобы получить недопустимые атрибуты w3c. Также используйте .eq(0), чтобы убедиться, что вы выбрали первое и единственное скрытое поле ввода. В случае более скрытых полей ввода нет никакой гарантии, что это сработает.

var inp1 = $("input[type=hidden]").eq(0), 
    val1 = inp1.attr("data-abc-value1"), 
    val2 = inp1.attr("data-abc-value2"), 
    val3 = inp1.attr("data-abc-value3"); 
0

вы можете получить их $("input[type='hidden']").attr('data-abc-value1') или $('input[data-abc-value1]').attr('data-abc-value1')

2

JQuery не обеспечивает способ запроса по именам частичных атрибутов, так что вы будете иметь, чтобы получить все скрытые входы, а затем отфильтровать результаты по атрибуту, используя обычный выражение:

$(function() { 
    var inputs = $('input[type="hidden"]').filter(function() { 
     var attrs = this.attributes; //get attribute collection for this element 
     for(var i=0; i<attrs.length; i++) { 
      if(/data-abc-*/.test(attrs[i].name)) { 
       return true; //adds this element to the jquery collection 
      } 
     } 
     return false; 
    }); 

    //do something with inputs 

}); 

http://jsfiddle.net/UPH6R/1/

+0

Спасибо .. Он отлично работал – SCP

1

Заканчивать образец в jsFiddle http://jsfiddle.net/vijaypatel/xk42F/

$.fn.filterData = function (set) { 
    var elems = $([]); 
    this.each(function (i, e) { 
     $.each($(e).data(), function (j, f) { 
      if (j.substring(0, set.length) == set) { 
       elems = elems.add($(e)); 
      } 
     }); 
    }); 
    return elems; 
} 

$.each($('input').filterData('abc'), function (index, value) { 
      alert($(this).attr('data-abc-value1')); 
     });