Собрать все атрибуты данных?

0

Моя веб-страница динамически генерируется с помощью данных-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>
Теги:
arrays
attributes

3 ответа

6
Лучший ответ
$('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
  • 0
    Вы можете собрать все эти данные и продолжать работать с объектом JSON. с кейсом и данными для него. это другая история! .data () собирает весь набор данных элемента. даже установить по сценарию.
2

Когда вы получаете доступ к элементу с любыми 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. Что может быть лучше, так это дать каждому привязному тегу некоторый идентификатор, чтобы вы могли сопоставить данные с соответствующим элементом, из которого он пришел.

0

Попробуй это:

$('li a').each(function(){
 console.log($(this).data())
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню