Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JQuery: как выбрать по id в переменной (https://javascript.ru/forum/misc/50727-jquery-kak-vybrat-po-id-v-peremennojj.html)

kostyanet 09.10.2014 08:14

JQuery: как выбрать по id в переменной
 
ID искомого элемента находится в name полученного элемента. На js было так

var rel=document.getElementById(elem.name);


на JQ я вычитал надо так

var rel=$('#'+elem.name);
console.log(rel);


В консоли печатается пустой jq-объект. Что еще надо приделать или отделать чтобы получить искомое?

kostyanet 09.10.2014 08:30

Может имеет значение какое оно name? Оно вот такое, например

user[0]

voral 09.10.2014 08:34

Вообщето id и name это разные аттрибуты/свойства элементов у вас какаято путаница с наименованиями. Потому на примере:
<input id="myid" name="myname">
....
var pElem = document.getElementById('myid');
var jElem =$('#myid');

voral 09.10.2014 08:39

Если же надо по имени
var nElem = $('input[name=myname]');

kostyanet 09.10.2014 08:44

Еще раз, ибо товарищ voral все запутал.

Есть элемент у которого есть имя. Задача. Надо взять это имя и найти _другой_ элемент у которого ID идентичен тому самому имени.

Обычным методом это решается как два пальца об асфальт и я так всегда делал, а теперь решил заюзать жиквери, и помаленьку, по ходу дела кое-где применяю.

Внезапно вылазит вот такой вот косяк - что я не могу получить реф на элемент когда его id (я так понимаю проблема именно в этом) выглядит вот так

user[0]

С какого это хрена? ID может быть тотально любым, даже числом если вы кладете на спецификацию, а уж всякие там скобки вообще никого не колебут кроме сервера.

kostyanet 09.10.2014 08:45

Сейчас я, конечно, сделал вот так, то есть чережопу:

var rel=$('#'+elem.name);
			console.log(rel);
			var rel=document.getElementById(elem.name);
			if(rel)
				$elem=$(rel);


А как сделать нормально?

kostyanet 09.10.2014 08:48

В консоли (с места по тексту выше) пишут вот что

Object { length: 0, prevObject: Object, context: HTMLDocument → person, selector: "#user[0]" }

где мой инпут по ид?

kostyanet 09.10.2014 08:55

Короче я сам нашел. Как обычно в такого рода либах всегда есть оборотная сторона покрытая толстым слоем кала. Хорошо что я еще мало чего переписал на jquery. И не буду.

Мне, видите-ли, предлагается заескейпить квадратные скобки. Это несмотря на то, что в самом начале жикверной документации по выборке написано - мы юзем getElementById как самый эффективный. Пиндеж!

kostyanet 09.10.2014 09:13

Рулез на синтаксис id http://www.w3.org/TR/html5/dom.html#the-id-attribute

voral 09.10.2014 10:19

Цитата:

Сообщение от kostyanet (Сообщение 334219)
Пиндеж!

А с чего вы взяли, что в вашем случае должен использоваться getElementById? Вы создали неправильный селектор и хотите чтоб скрипт его правильно (в вашем понимании) распарсил?

danik.js 09.10.2014 10:45

kostyanet, смотри не обделайся от эмоций. Неужели ты решил что ты умнее разработчиков jQuery? :D

kostyanet 09.10.2014 11:53

Селектор правильный, тот факт что исторически в них заложено несколько смыслов ничего не меняет. Как селекторами CSS id я никогда не пользовался и не собираюсь.

Что касается ума разработчиков JQuery, то он не может перепрыгнуть ум пользователей JQuery по определению. Как будто я не знаю откуда такой косяк - оттуда что аргумент подразумевается состоящий из чудовищного гавна, только потому что тупому юзеру не хватает извилин профтыкать уникальные id'шники. Соответственно когда в качестве аргумента попадает что-то похожее на гавно - оно считается гавном автоматически и ищется как гавно, а не как нормальный идентификатор.

kostyanet 09.10.2014 11:59

Кстати, я рассказывал как тырил шеврон у гугля и что увидел когда тырил - стырьте и вы. Там голимо все в id. На-й спрашивается париться искать через анусы всяких там родителей-шмадителей, если можно воткнуть id и мгновенно все получить в любом месте. Ну а классы само собой для коллекций - все просто.

voral 09.10.2014 12:12

Цитата:

Сообщение от kostyanet (Сообщение 334257)
Селектор правильный,

ню ню....
Наверное вы знаете лучше чем составители документации jQuery
http://api.jquery.com/id-selector/

kostyanet 09.10.2014 13:01

Теперь толпа что ли пишет спецификацию на структуру html'я? Ваш жиквери просто набор функций, опупенный массив с функциями, они ничего не могут специфицировать этим.

Спецификация тут, я давал ссылку, еще раз - http://www.w3.org/TR/html5/dom.html#the-id-attribute - покажите мене текст который доказывает что id user[0] неправильный.

kostyanet 09.10.2014 13:03

Цитата:

Сообщение от voral
Наверное вы знаете лучше чем составители документации jQuery

Цитата:

For id selectors, jQuery uses the JavaScript function document.getElementById(), which is extremely efficient.
Все, с этого момента согласно спецификации на HTML5 выдайте мне реф на элемент по заданному id. Не выдали - гавно написали, не специфицированное.

document.getElementById() пожизненно выдает рефы с каких хочешь ID, а эти моральные уроды накатали там лапши и вот результат.

Вот так работает:
var rel=document.getElementById(elem.name);
			if(rel)
				$elem=$(rel);
			else {
				alert(message);
				return;
			}


А вот так

var rel=$('#'+elem.name);

не работает. Значит не работает и точка. Потому что жикверя - это не язык, а либа. В либе язык DOM'а не работает.

voral 09.10.2014 13:10

Цитата:

Сообщение от kostyanet (Сообщение 334281)
Теперь толпа что ли пишет спецификацию на структуру html'я?

Это то вы где увидели? Я дал ссылку на документацию по jQuer, которым вы взялись пользоваться.

Цитата:

Сообщение от kostyanet (Сообщение 334281)
Ваш жиквери просто набор функций, опупенный массив с функциями, они ничего не могут специфицировать этим.

Это фреймворк. У него есть документация по работе с оным.

Цитата:

Сообщение от kostyanet (Сообщение 334281)
Спецификация тут, я давал ссылку, еще раз -

Отлично. А теперь подумайте, сто описывает документ по вашей ссылке, что по моей и чем вы пытаетесь пользоваться.

А вас не смущает, что парни создающие JavaScritpt тоже, гады такие, нарушают спецификацию ведь есть валидный код:
<div id="test"></div>

значит я имею право написать
doument.write ("<div id="test"></div");

вот только,потом мне придется идти на форум и сокрушаться что javaScript такое УГ.... Я буду прав?

kostyanet 09.10.2014 13:13

Конкретно это задача вот такая. Есть баллон который вылезает рядом с полем ввода чтобы сказать что юзер затупил. Обычнейшая вещь. Но есть частный случай когда это самое поле скрыто - например кнопка file, когда ее щелкает не юзер, а скажем image. Тогда баллон дуреет - ему некуда привязать свой хвост, инпут дисплей ноне. Ну вот, тогда делается rel(ation) - с инпута берется name и пихается в качестве id тому самому элементу который давит инпут. Уровень абстракции не зашкаливает, но в целом задачу решает. Скрипт делает попытку найти rel(ation) по факту что элемент скрыт и, если находит то заменяет скрытый инпут на видимый связанный инпут. Все это происходит по событию нажатия на скрытый инпут, то есть чередом. Ну а если не находит то вместо баллона юзер получает alert. Все просто.

voral 09.10.2014 13:18

Цитата:

Сообщение от kostyanet (Сообщение 334283)
Все, с этого момента согласно спецификации на HTML5 выдайте мне реф на элемент по заданному id. Не выдали - гавно написали, не специфицированное.

Ясно что Ъ парни не любят читать более чем им захочется. Помогу вам цитатой из того же текста:
Цитата:

If the id contains characters like periods or colons you have to escape those characters with backslashes.
Там же есть ссылка на текст описывающий сей вопрос более подробно.

Ну, а не способность изучать внимательно документацию перед использование не привьет и не заменит ни одна спецификация.

voral 09.10.2014 13:20

Цитата:

Сообщение от kostyanet (Сообщение 334287)
Все просто.

согласен :)

kostyanet 09.10.2014 13:20

Цитата:

Сообщение от voral
вот только,потом мне придется идти на форум и сокрушаться что javaScript такое УГ.... Я буду прав?

Вы х с п не путайте. Вот так оно полностью называется

HTML DOM getElementById() Method

Или WEB API Interface.

Так вот JQuery не выполняет спецификации этого API. Что вам еще не понятно тут?

Самое интересное это специальный символ вперде - # - нахер он тогда вообще нужен, если не обозначает что за ним идет конкретно ID, а не что-то другое?

kostyanet 09.10.2014 13:22

Цитата:

Сообщение от voral
Помогу вам цитатой из того же текста:

Вы меня за....ли своим баттхертом: где тут видно точку или двоеточку

user[0]

???

kostyanet 09.10.2014 13:25

Цитата:

Сообщение от voral
Ну, а не способность изучать внимательно документацию перед использование

Ну х с ними, прочитал, дальше что? Мне теперь что, регой слэшить квадратные скобки? Очуметь у вас фрейморк...

JQuery НЕ фреймворк, это массив с функциями. Хочу - юзаю, хочу не юзаю, хочу середина наполовину. Вы какую это документацию читали чтобы вообразить что - фреймворк?

danik.js 09.10.2014 13:26

Цитата:

Сообщение от kostyanet
Как обычно в такого рода либах всегда есть оборотная сторона покрытая толстым слоем кала. Хорошо что я еще мало чего переписал на jquery. И не буду.

Цитата:

Сообщение от voral
значит я имею право написать
doument.write ("<div id="test"></div");

kostyanet, видишь - весь js покрыт таким же слоем кала. А ну бросай писать на js.

danik.js 09.10.2014 13:28

Цитата:

Сообщение от kostyanet
Самое интересное это специальный символ вперде - # - нахер он тогда вообще нужен, если не обозначает что за ним идет конкретно ID, а не что-то другое?

О ты затупан. Тебя уже ткнули носом в твое гавно, а ты все продолжаешь.

#myid[class="blabla"] это все id по твоему?

kostyanet 09.10.2014 13:34

Сам вы затупан. Id может быть любым, но с таким как вы придумали будет трабла с собственными кавычками - их придется слэшить. Я же знаю что вы в php не пишите, а там такое регулярно возникает, что надо передать в js или в html строку с кавычками. Еще раз для тупых: литерал на то и литерал чтобы быть литералом. С этого императива начинается правило - что нет никаких правил для литералов кроме специальных символов. Список специальных символов - прилагается. Так? Теперь открываем на вытри орг спецуху и смотрим список специальных символов. Нету? Значит нету. Точка.

kostyanet 09.10.2014 13:39

Цитата:

Сообщение от danik.js
видишь - весь js покрыт таким же слоем кала. А ну бросай писать на js.

Ну вы затупан, я-то думал дело в документ.райт, а они тут изображают из себя жертв аборта.

Ну где вы такой видели язык, который бы позволял включать в текст символы который отделяют текст от исходного кода?

Типа вы этим самым мне хотели доказать что квадратные скобки тоже имеют такое же значение для синтаксиса JS? Ну вы и тупыее....

danik.js 09.10.2014 13:43

kostyanet, тебе пытаются объяснить, что одни правила могут накладываться на другие. Если ты пишешь js код внутри html атрибута, то ты должен не только эскейпить все по правилам js, но и по правилам html.

То же самое и с id. Если ты пишешь id внутри css селектора, то должен заескейпить все по правилам css селекторов. Если ты и так не понял то бросай программирование, не насилуй себя и окружающих.

kostyanet 09.10.2014 13:44

А что оно там вообще находит тогда по #user[0] это авнище? Кстати, у меня написана функция rect из двух частей - top и left. Практически независимые, только box берется в каждой каждый раз. Юзал так some_elem.style.left=rect.left(elem)+'px'; Думаю в могучем фрейморке жиквери же наверняка в объект встроены такие методы - типа захотел получить его left и получил идеально. Х нане. Сначала надо вычислить в переменную - в объект, а потом уже профтыкать из него. Ну или два раза как я понимаю будет считаться для топ и лефт каждый. В чем тогда цимес?

danik.js 09.10.2014 13:45

Кроме того, когда будешь эскейпить слешами, тебе еще придется эскейпить слеши по правилам js-строк.
А то ща опять начнешь визжать что разработчики ECMA спецификации не следуют спецификациям document.getElementById )))

danik.js 09.10.2014 13:46

Цитата:

Сообщение от kostyanet
Мне теперь что, регой слэшить квадратные скобки?

Лучше document.getElementById() - нет ниче страшного в этом.

А насчет эскейпа - вот тут да, гавнецо всплывает.
В файрфоксе есть CSS.escape(), а больше нигде и нет по-моему. Вот полифил: https://github.com/mathiasbynens/CSS.../css.escape.js

Ну и не раз просили такую функцию включить в jQuery.

kostyanet 09.10.2014 13:48

Цитата:

Сообщение от danik.js
То же самое и с id. Если ты пишешь id внутри css селектора, то должен заескейпить все по правилам css селекторов.

При чем тут css-селектор? id имеет _НЕСКОЛЬКО_ смыслов, я же писал выше. Следовательно КАЖДЫЙ смысл, ну то есть каждый контекст, оперирует своими правилами. Правил для id в смысле идентификатора элемента НЕ существует. Что касается правил каких-то там css селекторов, они НЕ применяются у меня и значит такой контекст возникнуть НЕ может. Так блин понятно?

kostyanet 09.10.2014 13:50

Цитата:

Сообщение от danik.js
Лучше document.getElementById() - нет ниче страшного в этом.

Странно, выходит document.getElementById() не соблюдает спецификацию JQuery? Ну как же - id не соответствует css-селектору, а оно возвращает реф. Нипорядок!

danik.js 09.10.2014 13:51

Цитата:

Сообщение от kostyanet
Что касается правил каких-то там css селекторов, они НЕ применяются у меня и значит такой контекст возникнуть НЕ может

А это что?
Цитата:

Сообщение от kostyanet
var rel=$('#'+elem.name);

Зачем тогда ты передаешь в функцию $ css-селектор?

danik.js 09.10.2014 13:52

Цитата:

Сообщение от kostyanet
Странно, выходит document.getElementById() не соблюдает спецификацию JQuery? Ну как же - id не соответствует css-селектору, а оно возвращает реф. Нипорядок!

Надеюсь ты прикидываешься тупым. getElementById не требует эскейпа, вот и вся разница.

kostyanet 09.10.2014 13:53

Ну да, примерно начал понимать. Теперь чтоб и вам было понятно.

Для меня class это коллекционный идентификатор который всегда применяется в связи с имеющимся классом в css. То есть это - рендер, представление.

А id - уникальный идентификатор элемента в дереве, который всегда применяется как уникальный идентификатор элемента в дереве без всякой связи с чем либо еще. То есть это - модель, структура содержания.

Для вас как я понимаю позуй и для вас и написали все так как хотели в той самой либе.

kostyanet 09.10.2014 13:55

Цитата:

Сообщение от danik.js
Зачем тогда ты передаешь в функцию $ css-селектор?

Блин, а как в JQ получить реф на элемент без этой решетки? Я набрал в поиске jquery get element by id - что выпало, так и сделал. Без решетки не дает.

voral 09.10.2014 13:56

Цитата:

Сообщение от kostyanet (Сообщение 334293)
Ну х с ними, прочитал, дальше что? Мне теперь что, регой слэшить квадратные скобки? Очуметь у вас фрейморк...

Вот и я так думаю про JS когда хочу написать:
document.write("<div id="test"></div>")

kostyanet 09.10.2014 13:59

Где еще варианты?

http://learn.jquery.com/using-jquery...g-class-or-id/

kostyanet 09.10.2014 14:01

Цитата:

Сообщение от voral
Вот и я так думаю про JS когда хочу написать:

Совсем тупой? На всех языках так устроено, но при чем тут квадратные скобки? С какого времени эти скобки в литерале стали иметь значение для js?


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