JQuery: как выбрать по id в переменной
ID искомого элемента находится в name полученного элемента. На js было так
var rel=document.getElementById(elem.name); на JQ я вычитал надо так var rel=$('#'+elem.name); console.log(rel); В консоли печатается пустой jq-объект. Что еще надо приделать или отделать чтобы получить искомое? |
Может имеет значение какое оно name? Оно вот такое, например
user[0] |
Вообщето id и name это разные аттрибуты/свойства элементов у вас какаято путаница с наименованиями. Потому на примере:
<input id="myid" name="myname"> .... var pElem = document.getElementById('myid'); var jElem =$('#myid'); |
Если же надо по имени
var nElem = $('input[name=myname]'); |
Еще раз, ибо товарищ voral все запутал.
Есть элемент у которого есть имя. Задача. Надо взять это имя и найти _другой_ элемент у которого ID идентичен тому самому имени. Обычным методом это решается как два пальца об асфальт и я так всегда делал, а теперь решил заюзать жиквери, и помаленьку, по ходу дела кое-где применяю. Внезапно вылазит вот такой вот косяк - что я не могу получить реф на элемент когда его id (я так понимаю проблема именно в этом) выглядит вот так user[0] С какого это хрена? ID может быть тотально любым, даже числом если вы кладете на спецификацию, а уж всякие там скобки вообще никого не колебут кроме сервера. |
Сейчас я, конечно, сделал вот так, то есть чережопу:
var rel=$('#'+elem.name); console.log(rel); var rel=document.getElementById(elem.name); if(rel) $elem=$(rel); А как сделать нормально? |
В консоли (с места по тексту выше) пишут вот что
Object { length: 0, prevObject: Object, context: HTMLDocument → person, selector: "#user[0]" } где мой инпут по ид? |
Короче я сам нашел. Как обычно в такого рода либах всегда есть оборотная сторона покрытая толстым слоем кала. Хорошо что я еще мало чего переписал на jquery. И не буду.
Мне, видите-ли, предлагается заескейпить квадратные скобки. Это несмотря на то, что в самом начале жикверной документации по выборке написано - мы юзем getElementById как самый эффективный. Пиндеж! |
Рулез на синтаксис id http://www.w3.org/TR/html5/dom.html#the-id-attribute
|
Цитата:
|
kostyanet, смотри не обделайся от эмоций. Неужели ты решил что ты умнее разработчиков jQuery? :D
|
Селектор правильный, тот факт что исторически в них заложено несколько смыслов ничего не меняет. Как селекторами CSS id я никогда не пользовался и не собираюсь.
Что касается ума разработчиков JQuery, то он не может перепрыгнуть ум пользователей JQuery по определению. Как будто я не знаю откуда такой косяк - оттуда что аргумент подразумевается состоящий из чудовищного гавна, только потому что тупому юзеру не хватает извилин профтыкать уникальные id'шники. Соответственно когда в качестве аргумента попадает что-то похожее на гавно - оно считается гавном автоматически и ищется как гавно, а не как нормальный идентификатор. |
Кстати, я рассказывал как тырил шеврон у гугля и что увидел когда тырил - стырьте и вы. Там голимо все в id. На-й спрашивается париться искать через анусы всяких там родителей-шмадителей, если можно воткнуть id и мгновенно все получить в любом месте. Ну а классы само собой для коллекций - все просто.
|
Цитата:
Наверное вы знаете лучше чем составители документации jQuery http://api.jquery.com/id-selector/ |
Теперь толпа что ли пишет спецификацию на структуру html'я? Ваш жиквери просто набор функций, опупенный массив с функциями, они ничего не могут специфицировать этим.
Спецификация тут, я давал ссылку, еще раз - http://www.w3.org/TR/html5/dom.html#the-id-attribute - покажите мене текст который доказывает что id user[0] неправильный. |
Цитата:
Цитата:
document.getElementById() пожизненно выдает рефы с каких хочешь ID, а эти моральные уроды накатали там лапши и вот результат. Вот так работает: var rel=document.getElementById(elem.name); if(rel) $elem=$(rel); else { alert(message); return; } А вот так var rel=$('#'+elem.name); не работает. Значит не работает и точка. Потому что жикверя - это не язык, а либа. В либе язык DOM'а не работает. |
Цитата:
Цитата:
Цитата:
А вас не смущает, что парни создающие JavaScritpt тоже, гады такие, нарушают спецификацию ведь есть валидный код: <div id="test"></div> значит я имею право написать doument.write ("<div id="test"></div"); вот только,потом мне придется идти на форум и сокрушаться что javaScript такое УГ.... Я буду прав? |
Конкретно это задача вот такая. Есть баллон который вылезает рядом с полем ввода чтобы сказать что юзер затупил. Обычнейшая вещь. Но есть частный случай когда это самое поле скрыто - например кнопка file, когда ее щелкает не юзер, а скажем image. Тогда баллон дуреет - ему некуда привязать свой хвост, инпут дисплей ноне. Ну вот, тогда делается rel(ation) - с инпута берется name и пихается в качестве id тому самому элементу который давит инпут. Уровень абстракции не зашкаливает, но в целом задачу решает. Скрипт делает попытку найти rel(ation) по факту что элемент скрыт и, если находит то заменяет скрытый инпут на видимый связанный инпут. Все это происходит по событию нажатия на скрытый инпут, то есть чередом. Ну а если не находит то вместо баллона юзер получает alert. Все просто.
|
Цитата:
Цитата:
Ну, а не способность изучать внимательно документацию перед использование не привьет и не заменит ни одна спецификация. |
Цитата:
|
Цитата:
HTML DOM getElementById() Method Или WEB API Interface. Так вот JQuery не выполняет спецификации этого API. Что вам еще не понятно тут? Самое интересное это специальный символ вперде - # - нахер он тогда вообще нужен, если не обозначает что за ним идет конкретно ID, а не что-то другое? |
Цитата:
user[0] ??? |
Цитата:
JQuery НЕ фреймворк, это массив с функциями. Хочу - юзаю, хочу не юзаю, хочу середина наполовину. Вы какую это документацию читали чтобы вообразить что - фреймворк? |
Цитата:
Цитата:
|
Цитата:
#myid[class="blabla"] это все id по твоему? |
Сам вы затупан. Id может быть любым, но с таким как вы придумали будет трабла с собственными кавычками - их придется слэшить. Я же знаю что вы в php не пишите, а там такое регулярно возникает, что надо передать в js или в html строку с кавычками. Еще раз для тупых: литерал на то и литерал чтобы быть литералом. С этого императива начинается правило - что нет никаких правил для литералов кроме специальных символов. Список специальных символов - прилагается. Так? Теперь открываем на вытри орг спецуху и смотрим список специальных символов. Нету? Значит нету. Точка.
|
Цитата:
Ну где вы такой видели язык, который бы позволял включать в текст символы который отделяют текст от исходного кода? Типа вы этим самым мне хотели доказать что квадратные скобки тоже имеют такое же значение для синтаксиса JS? Ну вы и тупыее.... |
kostyanet, тебе пытаются объяснить, что одни правила могут накладываться на другие. Если ты пишешь js код внутри html атрибута, то ты должен не только эскейпить все по правилам js, но и по правилам html.
То же самое и с id. Если ты пишешь id внутри css селектора, то должен заескейпить все по правилам css селекторов. Если ты и так не понял то бросай программирование, не насилуй себя и окружающих. |
А что оно там вообще находит тогда по #user[0] это авнище? Кстати, у меня написана функция rect из двух частей - top и left. Практически независимые, только box берется в каждой каждый раз. Юзал так some_elem.style.left=rect.left(elem)+'px'; Думаю в могучем фрейморке жиквери же наверняка в объект встроены такие методы - типа захотел получить его left и получил идеально. Х нане. Сначала надо вычислить в переменную - в объект, а потом уже профтыкать из него. Ну или два раза как я понимаю будет считаться для топ и лефт каждый. В чем тогда цимес?
|
Кроме того, когда будешь эскейпить слешами, тебе еще придется эскейпить слеши по правилам js-строк.
А то ща опять начнешь визжать что разработчики ECMA спецификации не следуют спецификациям document.getElementById ))) |
Цитата:
А насчет эскейпа - вот тут да, гавнецо всплывает. В файрфоксе есть CSS.escape(), а больше нигде и нет по-моему. Вот полифил: https://github.com/mathiasbynens/CSS.../css.escape.js Ну и не раз просили такую функцию включить в jQuery. |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Ну да, примерно начал понимать. Теперь чтоб и вам было понятно.
Для меня class это коллекционный идентификатор который всегда применяется в связи с имеющимся классом в css. То есть это - рендер, представление. А id - уникальный идентификатор элемента в дереве, который всегда применяется как уникальный идентификатор элемента в дереве без всякой связи с чем либо еще. То есть это - модель, структура содержания. Для вас как я понимаю позуй и для вас и написали все так как хотели в той самой либе. |
Цитата:
|
Цитата:
document.write("<div id="test"></div>") |
|
Цитата:
|
Часовой пояс GMT +3, время: 13:53. |