Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302

Xpath и нажатие на checkbox и radiobutton

02.09.2015, 21:18. Показов 3340. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

Пытаюсь сделать check\checked на чекбоксе и радиобатоне при помощи JS и Xpath, но не получается.
Подскажите, как это сделать.

HTML:
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<!DOCTYPE html>
<html>
<head>
    <script type='text/javascript' src="1.js"></script>
    <title>test page XPath</title>
    <meta charset="utf-8">
</head>
<body onload="boddr1();">
    <div class="rad">
        <form id="radioForm">
            <p><b>Какое у вас состояние разума?</b></p>
            <p><input name="dzen" type="radio" value="nedzen"> Не дзен</p>
            <p><input name="dzen" type="radio" value="dzen"> Дзен</p>
            <p><input name="dzen" type="radio" value="pdzen"> Полный дзен</p>
            <p><input type="submit" value="Выбрать"></p>
        </form> 
    </div>
    <div class="but">
        <input type="button" value="это input кнопка"></p>
        <button>это button кнопка</button> 
        <input type="submit" атрибуты>
        <button type="submit">это 2ая submit кнопка</button>
    </div>
    <div>
         <form>
            <p>В каких годах произошли самые известные извержения вулкана Кракатау?</p>
            <p><input type="checkbox" name="a" value="1417"> 1417</p>
            <p><input type="checkbox" name="a" value="1680"> 1680</p>
            <p><input type="checkbox" name="a" value="1883"> 1883</p>
            <p><input type="checkbox" name="a" value="1934"> 1934</p>
            <p><input type="checkbox" name="a" value="2010"> 2010</p>
            <p><input type="submit" value="Отправить"></p>
        </form>
    </div>
    <div>
        <select name="select" size="3" multiple>
            <option value="s1">Чебурашка</option>
            <option value="s2">Крокодил Гена</option>
            <option value="s3">Шапокляк</option>
            <option value="s4">Крыса Лариса</option>
        </select>
    </div>
    <div class="number">
        <input type="number" size="3" name="num" min="1" max="10" value="1">
    </div>
    <div>
        <form>
            <p>Вход на сайт</p>
            <p>Email: <input type="email" name="login"></p>
            <p>Пароль: <input type="password" name="pass"></p>
            <p><input type="submit" value="Вход"></p>
        </form>
    </div>
<p>100500 путей до чекбокса</p>
<div>
    <div>
        <div>
            <p><input type="checkbox" name="q" value="1"> 1</p>
        </div>
        <div>
            <div>
                <p><input type="checkbox" name="w" value="2"> 2</p>
            </div>
            <div>
                <p><input type="checkbox" name="w" value="3"> 3</p>
            </div>
        </div>
    </div>
    <div>
        <p><input type="checkbox" name="t" value="4"> 4</p>
        <p><input type="checkbox" name="u" value="5"> 5</p>
    </div>
</div>
</body>
</html>


JavaScript
1
2
3
4
5
6
function boddr1(){
    var ch = document.evaluate('/html/body/div[3]/form/p[4]/input', document, null, XPathResult.ANY_TYPE, null); 
    ch.checked = checked;
    ch.click();
 
}
этот js код не работает. Если там другие варианты, например цвет текста поменять - работает. проверила. Этот нет. Подскажите, что нужно сделать. Скорее всего, нужно использовать только JS, jQuery нельзя.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.09.2015, 21:18
Ответы с готовыми решениями:

Выбрать все checkbox при нажатие на главном checkbox
Не могу никак реализовать, допустим как это сделано на почтах или как mail.ru. При выборе главного checkbox выбираются все, при повторном...

CheckBox и RadioButton
Есть GroupBox1. На ней кнопка CheckBox1. RadioGroup1 на ней RadioButton1,RadioButton2,RadioButton3,RadioButton4,RadioButton5,RadioButton6....

Checkbox и RadioButton
Как изменить размеры стандартных компонентов Checkbox и RadioButton?

20
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
03.09.2015, 16:45
Nullik, а querySelector нельзя использовать, именно xpath?
0
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
03.09.2015, 18:38  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
Nullik, а querySelector нельзя использовать, именно xpath?
Я думала, что XPath в этом плане проще. А если использовать это, то как будет выглядеть?
0
 Аватар для Jetlag
111 / 49 / 20
Регистрация: 21.10.2013
Сообщений: 212
03.09.2015, 18:47
Лучший ответ Сообщение было отмечено Nullik как решение

Решение

Nullik, во-первых не надо использовать xpath если не стоит задача от преподавателя использовать xpath. DOM - это не просто xml а такая более конкретная структура в которой есть свои методы поиска, пользоваться которыми куда проще чем XPath.

Если все же надо XPath то обратите внимание что evaluate возвращает не ноду, а некий объект типа XPathResult из которого ноду надо еще вытащить например через .singleNodeValue или .iterateNext()
1
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
03.09.2015, 19:23
Лучший ответ Сообщение было отмечено Nullik как решение

Решение

Nullik, простыми словами
для html dom лучше использовать встроенные в него методы, они как минимум проще и быстрее

а для поиска по css, могу предложить почитать про сами селекторы, и то, что уже фигурировало, в посте Jetlag
1
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
03.09.2015, 20:39  [ТС]
преподаватель тут вообще ничего не говорил (что можно или что нельзя), я сама выбрала xpath.
И мне надо не XML, а HTML, а как там тогда достать конкретный элемент?

Т.е., есть вот там какой-нибудь радиобаттон и именно он нужен. то как быстрее всего до него указать путь, при этом не изобретать 100500 великов? Вооот, первым делом до меня дошёл XPath, но если есть что-то ещё и по нему есть уже реализованные вещи 9библиотеки, примеры, паттерны) - было бы тоже неплохо)))

Я думаю, что мне как раз не хватало этого для работы:

Цитата Сообщение от Jetlag Посмотреть сообщение
.singleNodeValue или .iterateNext()
Спасибо!))

Цитата Сообщение от BANO Посмотреть сообщение
Nullik, простыми словами
для html dom лучше использовать встроенные в него методы, они как минимум проще и быстрее
Если вам не сложно, назовите эти методы (хотя бы пару штук), чтобы я понимала что и как искать. Я и Ваши варианты посмотрю
0
 Аватар для Jetlag
111 / 49 / 20
Регистрация: 21.10.2013
Сообщений: 212
03.09.2015, 21:19
Nullik, ну Вы можете зайти по ссылке которую вам уже два человека дали или подождать пока придет кто-нибудь третий и даст эту же ссылку.

Работать с html страницей приходится почти всегда, XPath для этого ужасно громоздок, сложен и поэтому не применяется. Я понимаю, что это понятие знакомо по другим языкам и неохота вникать в новые сущности. Но это как скажем писать на сях и вместо if else писать ассемблерными джампами потому что "да ну его этот условный оператор".

Так вот, для работы c html и подобными структурами браузеры реализуют интерфейс называемый Document Object Model стандартизированный w3c. В этом интерфейсе определены классные методы поиска, простые по сравнению с XPath, (я таки кину ссылку в третий раз: http://learn.javascript.ru/searching-elements-dom). В js принято задавать элементам свойство class по смыслу (реже id) и искать по нему

Мало того, стандарт де-факто в индустрии - библиотека jQuery в которой имя метода поиска по документу состоит из одного символа $, который сам сожрет любой нормальный селектор и поймет к чему он относится

PS: js - интерпретируемый язык. То есть что происходит - можно обычно посмотреть на лету, не перегружая страницу. Жмем f12 - открывается консоль отладки, в которой можно пообщаться с интерпретатором, можно посмотреть какие методы есть у объекта, или скажем впилить брейкпоинт и посмотреть скоуп и коллстэк. Ну и ошибки туда пишутся понятным языком
0
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
03.09.2015, 21:29  [ТС]
аааа, эти методы я знаю, что Вы. Проблема только вот в чём: никто мне точно не может гарантировать что id будет один, или что <div class="f g h"> не встретиться ещё раз (тогда там либо первое вхождение, либо вручную считать, но у меня динамика). Эти варианты я уже смотрела, не увидела в них пользы для моего проекта, хотя они проще для понимания, это верно.
Спасибо за ссылку в третий раз))
0
 Аватар для Jetlag
111 / 49 / 20
Регистрация: 21.10.2013
Сообщений: 212
03.09.2015, 21:38
Nullik, мне кажется что Вы либо недопоняли как работают методы либо недопоняли чего хотите.
Тезисно:
1. Вам не нужен XPath. 99.9% что не нужен.
2. Методы поиска по DOM достаточно умны чтобы разобраться со всем чем надо. 99.9% что их вам хватит. Если кажется что не хватает - подумайте еще раз.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
03.09.2015, 21:41
Nullik, то, что id в документе не будут повторятся это вам гарантирую я

Добавлено через 1 минуту
думаю Jetlag присоединится, поскольку id, как написано в спецификации, должен быть уникальным, он не может повторятся, браузеры конечно проглотят, но второй id они читать уже не будут
0
 Аватар для Jetlag
111 / 49 / 20
Регистрация: 21.10.2013
Сообщений: 212
03.09.2015, 21:58
Вообще говоря "xpath не нужен" я во многом ориентируюсь на уровень вопроса конечно. Он может прекрасно применяться людьми которые точно знают что делают и зачем.

Если посмотреть в сферическом вакууме то главные минусы XPath:
1. Сложность отладки
2. Громоздкость
3. Относительная бажность реализации в браузерах
4. Читабельность и поддерживаемость. Все используют css селекторы.

А плюс - скорость выше, иногда существенно.

Так что XPath можно использовать если Вы разрабатываете какую-то очень серьезную продакшн либу с большими требованиями к скорости. Но я чет сомневаюсь =)
0
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
04.09.2015, 09:59  [ТС]
Нет, разумеется не продакшн либа, что вы

Делала я как-то шутки ради парсер на сайт яндекса - всё прекрасно парсилось и искалось через DOM методы. Правда стоит заметить, что делала я это на стандартном браузере WFApp (C#). А потом я взяла другой сайт (не яндекс) и парсилось не всё прекрасно, а проблема была вот в чём: когда я получала узел, то вместе с ним я получала ещё какие-то "лишние знаки", в прямом смысле этого слова. Какие-то непонятные переносы типа \n или пробелы. А самое забавное - весь узел и ниже ветки. Т.е., на сайте яндекса DOM отлично работал, а на другом сайте я не смогла даже вызвать метод nextChild, хотя он там 100% был.

Поверьте, на том сайте не было у каждого... элемента id, а классы могли повторяться. И чтобы мне из двух одинаковых элементов выбрать второй приходилось вторым шагом брать child. А если мне нужно было 10 таких элементов? Т.е., проблема там была в том, что взяв 1 раз - другое уже не получится взять, а на яндексе всё работало прекрасно. Я могла получить форму как узел, потом в ней ковыряться как хотеть, запускать циклы и прочее и всё прекрасно работало. Т.е., я понять не могу - почему на одном вдруг всё работает хорошо, на другом только 1 элемент найдёт, с ним может работать, а если спуститься к "соседу-элементу", то "не хочу, не буду" ?

Может быть здесь было просто что-то, что я не совсем поняла и что у меня не получилось исправить. Но я код копипастила, дабы уж точно "не ошибиться в 1 строке", и проверяла, и сама в ручную проверяла - ну получает он при получении узла не объект, а ерунду какую-то и всё, а при таком же коде, но другом сайте - нормально получает, мистика.

Цитата Сообщение от BANO Посмотреть сообщение
думаю Jetlag присоединится, поскольку id, как написано в спецификации, должен быть уникальным, он не может повторятся, браузеры конечно проглотят, но второй id они читать уже не будут
Предположим, а вдруг я выше id не заметила, думала второй элемент с таким id - уникальный, а как мы знаем, программисты сейчас как грибы после дождя, а кто там делал сайт (новенький или толковый) я же сказать не могу, и допустили они ошибку или нет, тоже сказать не могу, а "искать\проверять уникальности id" - это либо доп. функцию, чтобы проверяла, либо обойти иным способом (т.е. не использовать id или что-то ещё).

Я то использовать простые вещи только рада, работали бы они везде хорошо
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
04.09.2015, 18:09
Цитата Сообщение от Nullik Посмотреть сообщение
Предположим, а вдруг я выше id не заметила, думала второй элемент с таким id - уникальный, а как мы знаем, программисты сейчас как грибы после дождя, а кто там делал сайт (новенький или толковый) я же сказать не могу, и допустили они ошибку или нет, тоже сказать не могу, а "искать\проверять уникальности id" - это либо доп. функцию, чтобы проверяла, либо обойти иным способом (т.е. не использовать id или что-то ещё).
таким программистам, не знающим, что id на странице должен быть уникальным, в руки даже клаву не дам

вы поймите, если сайт сделан более-менее грамотно, а это 99% всего инета, то там точно используются уникальные id
короче, используйте id для уникальных вещей на странице
PS
никогда пока на своём опыте не встречал сайтов, где было бы 2 id

Добавлено через 3 минуты
да и вообще
использовать 2 и более одинаковых id это максимально не грамотно
0
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
04.09.2015, 19:42  [ТС]
да я это знаю, правда)) я за других переживаю, вдруг этих id будет 2, что делать, в случае ошибки? вот-вот))
т.е. либо кучу проверок, либо что-то более действенное и не использовать такое, что "блокнотом не проверяется" (уникальность id не проверяется).

Но допустить можно, почему бы нет. Можно даже попробовать реализовать 2 варианта, мне даже если элемент искать ручными средствами, всё равно нужно до элемента как-то путь указать. а это прям строчка xpath (или самодельного для программы-алгоритма-функции).
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
04.09.2015, 20:03
Цитата Сообщение от Nullik Посмотреть сообщение
уникальность id не проверяется
при желании -- проверяется
например

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<body>
<span>1</span>
<i id="a">2</i>
<b>3</b>
<div>4<u id="a">5</u></div>
 
<p>6</p>
 
</body>
<script>
var t = document.body.childNodes;
var coll = t.item ('a');
alert (coll.length);
</script>
1
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
04.09.2015, 20:14  [ТС]
JavaScript
1
var coll = t.item ('a');
я только вот эту строчку не поняла и как она влияет на coll.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
05.09.2015, 10:12
Nullik, записывает в coll все элементы с id a

Добавлено через 4 минуты
kalabuni, вот ттолько у меня работает не корректно, у меня выводит 4, по-моему это не привильно, ведь id 2
0
 Аватар для Nullik
46 / 15 / 4
Регистрация: 13.03.2013
Сообщений: 302
06.09.2015, 21:10  [ТС]
потому что есть два span ?
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
07.09.2015, 15:39
Nullik, ну и, прикол в том, что код изначально не рабочий
я конечно не могу критиковать авторитета, но всё же код не рабочий, поскольку с node немного по другому работают

Добавлено через 2 минуты
поскольку сначала возвращается nodeList, а буква "а" приравнивается к числу, а дальше уже не понятно почему ошибку вообще не выводит
1
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
07.09.2015, 18:06
упс, прошу прощения, промашка у меня вышла... двойная при этом

метод item () со строковым значением параметра работает только в браузере MSIE, и только для коллекций all, anchors, applets, areas, boundElements, cells, elements, embeds, forms, images, links, mimeTypes, options, plugins, rows, scripts, tBodies


так что... определять уникальность id надо по иному, например, так:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<span>1</span>
<i id="a">2</i>
<b>3</b>
<div>4<u id="a">5</u></div>
 
<p>6</p>
 
<script>
 
for (var t = document.getElementsByTagName ('*'), w = [], j = 0, J = t.length; j < J; j++)
if (t [j].id) if (!w [t [j].id]) w [t [j].id] = 1; else {alert (t [j].id + ' -- повторяется!'); break}
</script>
Цитата Сообщение от BANO Посмотреть сообщение
я конечно не могу критиковать авторитета
а кто тут авторитет-то?
в программировании авторитетов нет, ибо всякое утверждение легко проверяется
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.09.2015, 18:06
Помогаю со студенческими работами здесь

CheckBox и RadioButton
Дана целочисленная квадратная матрица размером n.Найти средние значения элементов по столбцам или строкам для отрицательных,положительных...

RadioButton + CheckBox
на форме в процессе выполнения проги появляется несколько контролов (пользователь сам задает число таковых) это все легко, но затык в том...

RadioButton (RadioGroup) CheckBox
решить через RadioButton или(RadioGroup),или CheckBox (или всё вмести =) ) Из трех данных чисел выбрать наименьшее , Из трех данных...

RadioButton, CheckBox и Timer
Как сделать так,что-бы при активации RadioButton1 и Checkbox1 включался 1-ый таймер, а при выборе RadioButton2 и Checkbox1 1-ый таймер...

Взаимодействие с CheckBox и RadioButton
Подскажите, как сделать чтобы при активации CheckBox или RadioButton соответствующее значение выводилось в label? CheckBox1 = 142 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru