Моя веб-страница динамически генерируется с помощью данных-runway-link, data-video-link, data-backstage-link, будет больше в будущем.....
Шаблоны всегда похожи на эту хэш-ссылку data, то, что я хочу сделать, извлечение текста "xxx" в каждом из них хранит их внутри массива, чтобы я мог ссылаться на каждую информацию, используя javascript
<li> <a data-season="Designer Profiles" data--link="123" data-video-link="1233"> </a></li>
<li> <a data-season="Spring/Summer 2014" data-Runway-link="abc" data-video-link="abc"> 3.1 Phillip Lim</a></li>
<li> <a data-season="Spring/Summer 2014" data-Runway-link="abc" data-video-link="abc"> Acne Studios</a></li>
<li> <a data-season="Spring/Summer 2014" data-Runway-link="abc" data-video-link="abc"> Aigner</a></li>
<li> <a data-season="Spring/Summer 2014" data-Backstage-link="abc" data-video-link="abc"> Alexander McQueen</a></li>
<li> <a data-season="Spring/Summer 2014" data-Runway-link="abc" data-video-link="abc"> Alexander Wang</a></li>
$('a').each(function(){
console.log($(this).data())
})
результат будет выглядеть так:
{season: 'Designer Profiles', 'runwayLink':'abc' ...}
скрипка:
http://jsfiddle.net/acrashik/NnHqQ/5/
STEP2: удаление словарной ссылки из ключей
самым простым способом было бы:
function removeLiknfromKey(data) {
var jsonstr = JSON.stringify(data);
var new_jsonstr = jsonstr.replace(/Link":/g, '":');
var new_obj = JSON.parse(new_jsonstr);
return new_obj;
}
у вас будет объект с именами XXX.
скрипка:
http://jsfiddle.net/acrashik/NnHqQ/6/
теперь вы можете использовать его красиво, используя только имя:
data.runway, data.video, data.season ... etc
Когда вы получаете доступ к элементу с любыми data-*
атрибутами с jQuery, вы можете получить доступ к объекту, содержащему все элементы data-*
используя функцию data()
.
Например, если у вас есть такой элемент:
<a id="elem" data-season="Designer Profiles" data-link="123" data-video-link="1233"> </a>
Вы могли бы сделать что-то вроде этого:
var element_data = $( "#elem" ).data();
Теперь каждый из ключей в element_data
будет иметь каждый атрибут данных.
element_data[ "season" ]; // "Designer Profiles";
element_data[ "link" ]; // "123";
element_data[ "video-link" ]; // "1233";
Вот соответствующая документация для функции data()
: http://api.jquery.com/data/ Как вы можете видеть, одна и та же функция действует как функция getter и setter. Таким образом, чтобы получить конкретный ключ данных, вы должны сделать что-то вроде этого:
var video_link = $( "#elem" ).data( "video-link" ); // "1233"
Вы также можете установить значение video-link
:
var new_video_link_value = "some other value";
var video_link = $( "#elem" ).data( "video-link", new_video_link_value );
Чтобы все это использовать и чтобы ответить на ваш вопрос, что бы вы сделали, это примерно так:
var elems = $("li > a"); // extract all of the relevant anchor tags
var elem_data = [];
$.each( elems, function( index, elem ){
elem_data.push( $(elem).data() );
});
Теперь у вас будут все атрибуты данных для каждого тега привязки в массиве elem_data
. Что может быть лучше, так это дать каждому привязному тегу некоторый идентификатор, чтобы вы могли сопоставить данные с соответствующим элементом, из которого он пришел.
Попробуй это:
$('li a').each(function(){
console.log($(this).data())
});