![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
05.07.2013, 13:10
|
Интересующийся
|
|
Регистрация: 13.06.2013
Сообщений: 15
|
|
Отметить чекбоксы
Здравствуйте.
Использую скрипт на работе, чтобы отметить галочками все чекбоксы на странице:
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; } })();
Но скрипт просто не сработал....
Последний раз редактировалось Fortun, 05.07.2013 в 14:46.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
05.07.2013, 18:35
|
Интересующийся
|
|
Регистрация: 13.06.2013
Сообщений: 15
|
|
Последний несработавший вариант, который я пробовал:
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; } })();
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
05.07.2013, 18:58
|
![Аватар для pikko](https://javascript.ru/forum/image.php?u=23770&dateline=1355001228) |
Аспирант
|
|
Регистрация: 06.10.2012
Сообщений: 60
|
|
во-первых, не хватает ';' перед вторым var,
во-вторых,
if (nodes[i].type == "checkbox")&&(elems.href == "/user/96682/edit")
не имеет смысла — elems это массив и у него нет свойства href
надо найти все tr'ы
var ulums = document.getElementsByTagName('tr')
пройтись по ним циклом и искать все a внутри каждого tr'a, и если href подходящий, то в этом же ( текущем ) tr искать инпут и чекать его.
всё просто =)
Последний раз редактировалось pikko, 05.07.2013 в 19:02.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
05.07.2013, 19:14
|
![Аватар для pikko](https://javascript.ru/forum/image.php?u=23770&dateline=1355001228) |
Аспирант
|
|
Регистрация: 06.10.2012
Сообщений: 60
|
|
как-то так, но не проверял
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;
}
}
}
}
)();
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
05.07.2013, 20:10
|
![Аватар для danik.js](https://javascript.ru/forum/image.php?u=8952&dateline=1362465013) |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Свойство .href ссылки проходит нормализацию и не равно начальному значению атрибута href. Можно использовать к примеру .pathname
var a = document.createElement('a');
a.setAttribute('href', '/user/4545/edit');
alert(a.href);
alert(a.pathname);
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
08.07.2013, 14:55
|
Интересующийся
|
|
Регистрация: 13.06.2013
Сообщений: 15
|
|
Сообщение от pikko
|
как-то так, но не проверял
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;
}
}
}
}
)();
|
Спасибо, но не работает...
Попытался слегка переработать этот код, но получилось аналогично, на странице - абсолютно никакой реакции.
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;
} })();
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
08.07.2013, 15:55
|
![Аватар для ruslan_mart](https://javascript.ru/forum/image.php?u=20699&dateline=1502382178) |
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
(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;
}
})();
![](https://javascript.ru/forum/images/smilies/smile.gif)
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
10.07.2020, 00:20
|
Новичок на форуме
|
|
Регистрация: 10.07.2020
Сообщений: 1
|
|
Здравствуйте!
Вот использую такой код для отметки чекбоксов
(function () {
var nodes = document.getElementsByTagName("INPUT");
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].type == "checkbox")
nodes[i].checked = true;
}
})();
вот инструкция
Цитата:
|
Для этого нам понадобится Firefox(можно и в Google Chrome и Opera, но там свои комбинации клавиш), открываем консоль JS клавишами Shift+F4. Вставляем туда этот код и жмём выполнить. Готово! Все чек-боксы на странице отмечены.
|
Подскажите, а если надо выделить строго 50 первых чекбоксов, как поправить код?
А потом нужно пропустить 50 и выделить следующие.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
10.07.2020, 05:05
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
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
Можно ли с этими вводными решить вашу задачу используя только один цикл?
Последний раз редактировалось laimas, 10.07.2020 в 05:30.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
10.07.2020, 07:11
|
![Аватар для voraa](https://javascript.ru/forum/image.php?u=69123&dateline=1640150450) |
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,754
|
|
(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>
Последний раз редактировалось voraa, 10.07.2020 в 07:17.
|
|
|
|