Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как добавить атрибуты ко всем блокам? (https://javascript.ru/forum/misc/58802-kak-dobavit-atributy-ko-vsem-blokam.html)

salofun 11.10.2015 19:27

Как добавить атрибуты ко всем блокам?
 
Всем привет, подскажите, я хочу добавить ко всем блокам, которые у меня в переменной blocks атрибут data-name="block#", где # там число от 1 и соответствует кол-ву блоков. Я использую библиотеку jquery.

var blocks = ['#block1', '#block2'],
i = 1;

bb = blocks.join();
for ( i = 1; i < bb.lenght; i++ ) {
    if (true) { $(bb).attr('data-name', 'block' + i ); break;}
};


Код никаких ошибок не выдаёт, но и атрибут не добавляет, что не так?

p.s насколько я понимаю проблема в цикле, потому-что без него атрибут добавляется (data-name="block1")

рони 11.10.2015 19:37

salofun,
откуда взялось
Цитата:

Сообщение от salofun
bb

?

salofun 11.10.2015 19:42

Извиняюсь, от руки переписывал, не копипастом, сейчас поправил

ruslan_mart 11.10.2015 19:54

var blocks = ['#block1', '#block2'],
$(blocks.toString()).each(function(index) {
    this.dataset.name = 'block' + index;
});

salofun 11.10.2015 20:06

Цитата:

Сообщение от Ruslan_xDD (Сообщение 391596)
var blocks = ['#block1', '#block2'],
$(blocks.toString()).each(function(index) {
    this.dataset.name = 'block' + index;
});

Запятую на двоеточие в конце переменной заменил и ок.

рони 11.10.2015 20:13

Цитата:

Сообщение от Ruslan_xDD
$(blocks.toString())

это лишнее

salofun 11.10.2015 20:18

Цитата:

Сообщение от рони (Сообщение 391599)
это лишнее

Если убрать не работает, но если вывести bb = blocks.join(); тогда работает (если указать $(bb)... )

Какой раздел учебника мне почитать?

Вот добавил к index + 1, так правильно, или нужно иначе?

$(bb).each(function(index) {
    var i = (index + 1);
    this.dataset.name = 'block' + i;
});

ruslan_mart 11.10.2015 20:24

рони, ну если jQuery воспринимает массив как строку, то - да. Я просто не знаю, как она там устроена, редко в ней работаю.

salofun, в принципе, правильно, но можно сразу так:

this.dataset.name = 'block' + (index + 1);

salofun 11.10.2015 20:39

Спасибо, а можно ещё вопрос, я хочу взять это в функцию и повторить с другими значениями, как мне поступить?

Как дать значения переменным i и y?

function iElement(i, y) {
$(i).each(function(index) {
    this.dataset.name = y + (index + 1);
});
};


Поспешил, людей насмешил, всё же правильно, теперь я вызову функцию и задам значения.

iElement(blockers, 'block');
iElement(buttoners, 'button');


Всем спасибо, несколько часов шевелил мозги, но с вашей помощью всё получилось в считанные минуты.

рони 11.10.2015 21:27

Цитата:

Сообщение от salofun
Если убрать не работает

если правильно написать то работает :)

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
[data-name]{background:#FFD700;width:100px;cursor:pointer;margin:5px auto;}
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js">
</script>
  <script>
$(function() {
    var blocks = ["#block1", "#block2"];
    $(blocks).each(function(index, id) {
        $(id).click(function() {
            alert(this.dataset.name)
        })[0].dataset.name  = "block" + ++index
    })
  });
  </script>
</head>

<body>
  <div id="block1">
    click me 1
  </div>

  <div id="block2">
    click me 2
  </div>
</body>
</html>


Часовой пояс GMT +3, время: 23:06.