Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.07.2013, 13:10
Интересующийся
Отправить личное сообщение для Fortun Посмотреть профиль Найти все сообщения от Fortun
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 05.07.2013, 18:35
Интересующийся
Отправить личное сообщение для Fortun Посмотреть профиль Найти все сообщения от Fortun
 
Регистрация: 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; } })();
Ответить с цитированием
  #3 (permalink)  
Старый 05.07.2013, 18:58
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 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.
Ответить с цитированием
  #4 (permalink)  
Старый 05.07.2013, 19:14
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 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;
            }
        }
    }
}
)();
Ответить с цитированием
  #5 (permalink)  
Старый 05.07.2013, 20:10
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 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);
Ответить с цитированием
  #6 (permalink)  
Старый 08.07.2013, 14:55
Интересующийся
Отправить личное сообщение для Fortun Посмотреть профиль Найти все сообщения от Fortun
 
Регистрация: 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; 
} })();
Ответить с цитированием
  #7 (permalink)  
Старый 08.07.2013, 15:55
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 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;
	}
})();


Ответить с цитированием
  #8 (permalink)  
Старый 10.07.2020, 00:20
Новичок на форуме
Отправить личное сообщение для ArchibaldIron Посмотреть профиль Найти все сообщения от ArchibaldIron
 
Регистрация: 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 и выделить следующие.
Ответить с цитированием
  #9 (permalink)  
Старый 10.07.2020, 05:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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.
Ответить с цитированием
  #10 (permalink)  
Старый 10.07.2020, 07:11
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

(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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QJuery стилизованные чекбоксы tiksi jQuery 2 15.05.2013 11:38
Отметить радио кнопку leny Общие вопросы Javascript 2 12.10.2011 15:22
Как пометить заголовок классом если все чекбоксы ниже включены? МаринаКрутакова jQuery 8 10.10.2011 07:32
Помогите вставить в форму не только чекбоксы но и выпадающий список seva_81 Серверные языки и технологии 3 20.09.2010 10:02
не могу открыжить все чекбоксы нажатием одного nenastiy Events/DOM/Window 11 23.05.2010 17:50