Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   работа с атрибутами (https://javascript.ru/forum/jquery/57174-rabota-s-atributami.html)

yintar 22.07.2015 20:43

работа с атрибутами
 
Всем привет,
У меня есть таблица в ней напротив каждой строки чекбокс. При выборе строки(кликом по чекбоксу) мне надо для этой строки получить значение атрибута datum.
<tr class='sales_confirmation_no' datum='<?php echo $value['sales_date'] ?>'>

Вопрос:подскажите,пожалуйс та как мне получить значение атрибута datum из этой строки

Aetae 22.07.2015 21:23

Если чекбокс где-то внутри tr, то:
$('tr[datum] input[type="checkbox"]').click( function(){
    alert(
        $(this).parents('tr[datum]').attr('datum')
    );
})

Иначе потребно каким либо образом связать конкретный чекбокс с конкретным tr.

tysonfury2015 22.07.2015 21:27

А если снаружи
<table style="float: left">
<tr class='sales_confirmation_no' datum="foo">
 <td>foo</td>
 <td>foo</td>
 <td>foo</td>
</tr>
<tr class='sales_confirmation_no' datum="bar">
 <td>foo</td>
 <td>foo</td>
 <td>foo</td>
</tr>
<tr class='sales_confirmation_no' datum="baz">
 <td>foo</td>
 <td>foo</td>
 <td>foo</td>
</tr>
</table>

<input type="checkbox" style="margin-bottom: 10px"><br>
<input type="checkbox" style="margin-bottom: 10px"><br>
<input type="checkbox" style="margin-bottom: 10px"><br>

<script>
 
trs=[].map.call(document.querySelectorAll("tr"), function(x){return x})
;[].forEach.call(document.querySelectorAll("input[type=checkbox]"), function(x, i){
  x.onclick=function(){alert(trs[i].getAttribute("datum"))}
})


</script>

yintar 22.07.2015 21:35

спасибо,работает

рони 22.07.2015 22:32

Цитата:

Сообщение от tysonfury2015
trs=[].map.call

это зачем?

tysonfury2015 22.07.2015 22:38

Цитата:

Сообщение от рони
это зачем?

Чтобы получить коллекцию в виде массива. Я знаю, там есть какая-то нативная фигня для этого, что-то типа toArray, но я не помню:)

рони 22.07.2015 22:47

Цитата:

Сообщение от tysonfury2015
Чтобы получить коллекцию в виде массива.

можно узнать а зачем? зачем нужен массив?

tysonfury2015 22.07.2015 22:51

Цитата:

Сообщение от рони
можно узнать а зачем? зачем нужен массив?

Да, он наверное там не нужен, там и так, по ключам все выдернется, ты прав. Во всяком случае, в данном примере. Просто с массивом как-то надежней, хз, что там может выкинуть эта гребаная коллекция.

tysonfury2015 22.07.2015 23:02

рони,
Кстати, если говорить не для данного случая, а вообще, тут такая фигня может получится. допустим, ты получил коллекцию, в которой 3 числовых элемента. и потом, вызываешь, collection[5]. у тебя перформанс уйдет в говно, потому что лукап пойдет по всем ключам, и по всем прототипам, об этом тоже забывать не надо. Не знаю, может такие вещи сейчас оптимизируются, но в ручную оно всяко спокойней:)

рони 22.07.2015 23:22

tysonfury2015,
про фигню не понял, жаргоном не владею.
querySelectorAll возвращает(псевдомассив) NodeList на момент поиска.
Цитата:

is a non-live NodeList
не живая ,в отличии от
Цитата:

getElementsBy* — живые! При изменении документа — изменяется и результат запроса.
, каким образом эта коллекция может изменится?
https://learn.javascript.ru/searchin...-getelementsby
https://developer.mozilla.org/ru/doc...erySelectorAll

tysonfury2015 22.07.2015 23:27

Цитата:

Сообщение от рони
псевдомассив

так называемый псевдомассив, это обычный объект, типа {0: "foo", 1: "bar", foo: bar, bar: "baz", __proto__: someObject}. Я не уверен, что при вызове collection[5] поиск остановиться на 1 и прервется.

рони 22.07.2015 23:33

tysonfury2015,
ок


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