Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Поиск элемента без id (https://javascript.ru/forum/events/23152-poisk-ehlementa-bez-id.html)

ksevelyar 14.11.2011 10:16

Поиск элемента без id
 
Хочу написать код выделяющий содержимое блока (pre, например) без привязки к id (таких блоков много).

Нагуглил конструкции с parent/next, вроде этой:

http://jsfiddle.net/5NtxT/4/


Но они не работают. Для них нужна специальная библиотека?

Читаю сейчас учебник, там такого нет — http://beta.javascript.ru/tutorial/s...g-elements-dom.

Прошу подсказать куда копать.

Pavel M. 14.11.2011 10:26

начни например отсюда http://coders.ask-ru.net/question.aspx?qid2=275

ksa 14.11.2011 10:28

Цитата:

Сообщение от ksevelyar
Хочу написать код выделяющий содержимое div без привязки к id (таких блоков много).
...
Прошу подсказать куда копать.

В сторону class... :)

ksevelyar 14.11.2011 16:28

Цитата:

Сообщение от ksa (Сообщение 136369)
В сторону class... :)

Для большого количества блоков на странице всё равно потребуются указания относительно текущего элемента.

Цитата:

начни например отсюда http://coders.ask-ru.net/question.aspx?qid2=275
Спасибо. То есть без jQuery не обойтись?

trikadin 14.11.2011 19:22

Цитата:

Сообщение от ksevelyar
То есть без jQuery не обойтись?

jQuery - всего лишь библиотека для javascript'а. Соответственно, всё, что возможно сделать с помощью неё, можно сделать и с помощью js)

ksa 14.11.2011 21:22

Цитата:

Сообщение от ksevelyar
всё равно потребуются указания относительно текущего элемента

Тебе видней. :D Я твоей разметки пока не видел...

ksevelyar 14.11.2011 22:34

Цитата:

jQuery - всего лишь библиотека для javascript'а. Соответственно, всё, что возможно сделать с помощью неё, можно сделать и с помощью js)
Вот я и спрашиваю — как это сделать. Или хотя бы с чего начать делать.

Цитата:

Сообщение от ksa (Сообщение 136462)
Тебе видней. :D Я твоей разметки пока не видел...

Ссылка всё время была в первом посте топика — http://jsfiddle.net/5NtxT/2/.

Gozar 14.11.2011 22:38

ню ... можно на классах
document.querySelectorAll('.button')


работает начиная с ie8, если нужно ниже версии то либо писать велосипед либо jquery или любую другую либу, они все умеют шариться по классам на странице.

trikadin 14.11.2011 22:45

Цитата:

Сообщение от ksevelyar
Вот я и спрашиваю — как это сделать. Или хотя бы с чего начать делать.

А не очень-то понятно, что тебе нужно. Выделение, оно, знаешь ли, разным бывает.

Такое? Здесь span'ы, правда, ну не суть...

<script>
function highlight() {
 var list= document.getElementsByClassName("highlight");
 for (var i=0; i!= list.length; ++i)
  list[i].style.background="yellow";
};
</script>
Lorem <span class="highlight">ipsum dolor</span> sit <span class="highlight">amet</span>, consectetur <span class="highlight">adipisicing elit</span>, sed do <span class="highlight">eiusmod</span> <span class="highlight">tempor</span> incididunt ut labore et <span class="highlight">dolore magna</span> aliqua.
<input type="button" onclick="highlight()" value="Подсветить некоторые слова">

ksevelyar 14.11.2011 23:13

Нет, такое:


Правда пока я не разобрался с определением нужного блока, не то что с выделением.

Допустим на одной странице есть три блока — http://jsfiddle.net/5NtxT/8/.

Пусть классы, но всё равно нужно работать относительно текущего блока (this?) и его родителя (parent?). Иначе при кнопке «выделить всё» будут обработаны все три блока.

Цитата:

работает начиная с ie8
Да, поддержка старых браузеров мне не нужна.

trikadin 14.11.2011 23:20

Гуглить в сторону Range, textRange, selection...

ksevelyar 14.11.2011 23:22

Цитата:

Сообщение от trikadin (Сообщение 136490)
Гуглить в сторону Range, textRange, selection...

Спасибо, а что по первой части скажите?
Цитата:

Правда пока я не разобрался с определением нужного блока, не то что с выделением.

Допустим на одной странице есть три блока — http://jsfiddle.net/5NtxT/8/.

Пусть классы, но всё равно нужно работать относительно текущего блока (this?) и его родителя (parent?). Иначе при кнопке «выделить всё» будут обработаны все три блока.

Почемучкин 14.11.2011 23:44

У div поставить в onclick функцию выделения, которой передавать параметр this. Функция находит родителя this.parentNode и далее с помощью textRange как-то выделяешь фрагмент.

ksevelyar 15.11.2011 00:00

Спасибо, собственно сам сниппет выделяющий код уже нашёл — отпишу здесь как получится воплотить задумку.

ksevelyar 15.11.2011 10:34

Получилось что-то такое: http://jsfiddle.net/ksevelyar/5NtxT/24/

Пытаюсь избавиться от выделения самой кнопки.

На «select_all(this.parent(code))» FireBug ругается — как правильно?

Pavel M. 15.11.2011 10:40

про запрет выделения можно посмотреть здесь http://beta.javascript.ru/tutorial/prevent-selection

ksevelyar 15.11.2011 10:52

Да, спасибо.

Итог — http://jsfiddle.net/ksevelyar/5NtxT/25/.

Буду рад узнать о «корявостях», чтобы их сгладить.

ksa 15.11.2011 11:47

Цитата:

Сообщение от ksevelyar
Ссылка всё время была в первом посте топика

Я по ссылкам незнакомцев не хожу... :D Пусть не ленятся и тут показывают что им нужно...

Почемучкин 16.11.2011 08:32

Хм, а у меня выделяется и текст кнопки:
Цитата:

Выделить текст!

- Еще? - переспросила Алиса с обидой. - Я пока ничего не пила.
Вот что в клипбоарде

FF 3.6

ksevelyar 16.11.2011 08:38

Видимо слишком старая лиса :) В 8-ой нормально.

Почему вы ещё пользуетесь ей?

Pavel M. 16.11.2011 10:34

Цитата:

Сообщение от ksevelyar
Буду рад узнать о «корявостях», чтобы их сгладить.

можно не пользоваться запрещением выделения, а просто выделять элемент с текстом code http://jsfiddle.net/AbztB/

ksevelyar 16.11.2011 10:44

Спасибо, пытался переделать выделение кода с помощью next, когда сделал спойлеры, но у меня не получилось. Из-за «[0]».

Почему здесь не нужен «[0]» — http://jsfiddle.net/ksevelyar/aue2T/

А здесь — http://jsfiddle.net/AbztB/ — нужен?

Pavel M. 16.11.2011 10:49

Цитата:

Сообщение от ksevelyar
Почему здесь не нужен «[0]» — http://jsfiddle.net/AbztB/

А здесь — http://jsfiddle.net/ksevelyar/aue2T/ — нужен?

без [0] это объект jquery, а с [0] - первый DOM элемент в выборке jquery

в первом случае нужно было передать в функцию DOM элемент

можно для выборки, например первого, DOM элемента использовать $(this).get(0)

ksevelyar 16.11.2011 10:55

Поправил своё сообщение, я перепутал ссылки :)

То есть дело в том, что toggle это тоже jQuery и ему подходит объект jQuery?

Pavel M. 16.11.2011 10:57

Цитата:

Сообщение от ksevelyar
То есть дело в том, что toggle это тоже jQuery и ему подходит объект jQuery?

лучше сказать у jquery объекта есть метод toggle(), а у DOM элемента нет

Почемучкин 17.11.2011 00:05

Потому что не все расширения поддерживаются.
Но ей много кто пользуется, уверяю.


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