Отметить чекбоксы
Здравствуйте.
Использую скрипт на работе, чтобы отметить галочками все чекбоксы на странице: javascript: (function () { var nodes = document.getElementsByTagName("INPUT"); for (var i = 0; i < nodes.length; i++) { if (nodes[i].type == "checkbox") nodes[i].checked = true; } })(); Чекбоксы отмечаются в таблице, и хочу спросить: как изменить код, чтобы чекбокс отмечался только если в строке чекбокса, в другом столбце, стоит определенный ID (в примере это user/925009/sudo). Вот код части таблицы: <tbody> <tr class="sf_admin_row" advert_id="2197475" update_url="/advert/2197475"> <td class="td-checkbox"> <input type="checkbox" name="ids[]" value="2197475" /> </td> <td> <a href="/site/807/edit">00j.org</a> <span style="color: #f55"></span><br /> <small> <em>Неизвестно</em> </small> </td> <td> <span style="color: #bb4;">54%</span> </td> <td> <a href="/user/96682/edit">user1</a> <a href="/user/96682/sudo">[L]</a> </td> <td> <a href="/user/925009/edit">user2</a> <a href="/user/925009/sudo">[L]</a> </td> <td> </tr> Я попробовал сделать так: javascript: (function () { var nodes = document.getElementsByTagName("INPUT") var elems = nodes.getElementsByTagName('a'); for (var i = 0; i < nodes.length; i++) { if (nodes[i].type == "checkbox")&&(elems[i].href == "/user/96682/edit") nodes[i].checked = true; } })(); и так javascript: (function () { var nodes = document.getElementsByTagName("INPUT")[0].getElementsByTagName("a"); for (var i = 0; i < nodes.length; i++) { if (nodes[i].type == "checkbox")&&(nodes[i].href == "/user/96682/edit") nodes[i].checked = true; } })(); Но скрипт просто не сработал.... |
Последний несработавший вариант, который я пробовал:
javascript: (function () {var ulums = document.getElementsByTagName('tr') var nodes = documents.getElementsByTagName("input") var elems = ulums.getElementsByTagName('a'); for (var i = 0; i < nodes.length; i++) { if (nodes[i].type == "checkbox")&&(elems.href == "/user/96682/edit") nodes[i].checked = true; } })(); |
во-первых, не хватает ';' перед вторым var,
во-вторых, if (nodes[i].type == "checkbox")&&(elems.href == "/user/96682/edit")не имеет смысла — elems это массив и у него нет свойства href надо найти все tr'ы var ulums = document.getElementsByTagName('tr') пройтись по ним циклом и искать все a внутри каждого tr'a, и если href подходящий, то в этом же ( текущем ) tr искать инпут и чекать его. всё просто =) |
как-то так, но не проверял
javascript: ( function () { var trs = document.getElementsByTagName('tr'); for (var row = trs.length; row; row--) { var ass = trs[row].getElementsByTagName('a'); for ( var i = ass.length; i; i--) { if ( ass[i].href === '/user/96682/edit' ) { trs[row].getElementsByTagName("input")[0].checked = true; } } } } )(); |
Свойство .href ссылки проходит нормализацию и не равно начальному значению атрибута href. Можно использовать к примеру .pathname
var a = document.createElement('a'); a.setAttribute('href', '/user/4545/edit'); alert(a.href); alert(a.pathname); |
Цитата:
Попытался слегка переработать этот код, но получилось аналогично, на странице - абсолютно никакой реакции. javascript: ( function () { var trs = document.getElementsByTagName('tr'); for (var row = trs.length; row; row--) } { var elems = trs[row].getElementsByTagName('a'); { for (var i = ass.length; i; i--) } var nodes = documents.getElementsByTagName("input"); for (var x = nodes.length; x; x--) { if (nodes[x].type == "checkbox")&&(elems[i].href == "/user/96682/edit") nodes[x].checked = true; } })(); |
(function() { var links = ['/user/96682/edit', '/ololo/']; //Тут ссылки для которых отмечать чекбокс var a = document.getElementsByTagName('table')[0], b = a.getElementsByTagName('input'), c; for(i=0; i<b.length; i++) if(b[i].type == 'checkbox') { c = b[i].parentNode.parentNode.getElementsByTagName('a'); for(k=0; k<c.length; k++) for(var j in links) if(c[k].getAttribute('href') == links[j]) b[i].checked = true; } })(); :) |
Здравствуйте!
Вот использую такой код для отметки чекбоксов (function () { var nodes = document.getElementsByTagName("INPUT"); for (var i = 0; i < nodes.length; i++) { if (nodes[i].type == "checkbox") nodes[i].checked = true; } })(); вот инструкция Цитата:
А потом нужно пропустить 50 и выделить следующие. |
ArchibaldIron, просто правильно указать параметры цикла. Пусть N - это количество элементов массива, а L - это размер элементов которые должны подвергнуты изменению, P - это количество элементов которые нужно пропускать, I - итератор цикла. Если брать срез массива, начало которого будет задаваться значением I, а размер L, при этом приращение итератора будет равно I += L + P, то вы получите желаемое. В вашем случае L = P, следовательно приращение итератора I += L * 2.
for(I=0; I<N; I+=L*2) [].slice(I, L) Этот пример хорошо поясняет суть - берем отрезок и с нужным интервалом продвигаясь по нему берем его необходимую часть. Но с этим примером нужно: а) получить массив элементов для обхода их в цикле, б) получать срез элементов и их обходить во вложенном цикле. Но принцип подсказывает, что можно обойтись одним циклом, опять таки обойтись только управлением итератора. Предлагается немного подумать над подсказками: 1) Знаем размер N 2) Знаем длину L 3) От деления N / L можно брать только целые значения 4) Целое от деления будет иметь четные и нечетные значения 5) Четные и нечетные значения, и L Можно ли с этими вводными решить вашу задачу используя только один цикл? |
(function () { let chsk = [50, 50, 20]; let k = 0, n = chsk[0]; document.querySelectorAll("INPUT[type=checkbox]").forEach( (el, i) => { if (i == n) {k++; n+=chsk[k]} if (k%2 == 0) el.checked = true; } ); })(); Массив chsk задает количество отмечаемых и пропускаемых элементов [nc1, ns1, nc2, ns2, nc3] nc1, nc2, nc3 - сколько отметить; ns1, ns2 - сколько пропустить <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>checks</title> </head> <body> <div id="block"> </div> </body> <script> // Тут просто генерируем 50 чекбоксов let s = ''; let n = 50; for (let i=0; i<n; i++) s+=`${i}: <input type='checkbox' name='check'><br>`; document.getElementById('block').innerHTML = s; </script> <script> (function () { // 10 отметить, 20 пропустить, 10 отметить, 7 пропустить, 2 отметить let chsk = [10, 20, 10, 7, 2]; let k = 0, n = chsk[0]; document.querySelectorAll("INPUT[type=checkbox]").forEach( (el, i) => { if (i == n) {k++; n+=chsk[k]} if (k%2 == 0) el.checked = true; } ); })(); </script> </html> |
Часовой пояс GMT +3, время: 21:30. |