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 14:02

Ладно, заебали. Баттхерт вещь могучая... покруче эболы. Ну а что блин, если надо то и круглые приравняем к string definition, и звезды, и буквы Х и все что угодно лишь бы доказать что все было сделано правильно. А когда алфавит весь задействуете то вот таким каким вот \х\у\e\м будете писать?

danik.js 09.10.2014 14:08

Цитата:

Сообщение от kostyanet
На всех языках так устроено

Вот об этом и речь. В css-языке именно так и устроено. В нем квадратная скобка имеет особое значение. Так же как и кавычка в JS.

У тебя два пути: использовать getElementById либо эскейпить. Вопрос исчерпан.

voral 09.10.2014 14:09

Цитата:

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

Тебе выше уже очень подробно мою мысль разжевали..... Повторить?

kostyanet 09.10.2014 14:17

Цитата:

Сообщение от danik.js
В css-языке именно так и устроено

При чем тут CSS? Меня николебет CSS в ID и точка. Или JQ только с CSS что ли работает? Низнал.

А насчет document.write я понял почему они такую лабуду пишут. ПОтому что что нет русской секции в статье на википедии - http://en.wikipedia.org/wiki/Opaque_data_type

Великая нация программистов ниасилила перевести, а если по-русски не написано, то его и нет.

kostyanet 09.10.2014 14:20

И вот тут кстати да, интересный вопрос, что для js вообще opaque string, если этот ебалайтен позволяет мне набрать вот такой текст

var help='Управление просмотром товаров\n--------------------------------------------------------------\n\n'
		+'с помощью мыши:\n\tследующий товар - щелчок по правой стороне экрана.\n\tпредыдущий - по левой.\n\n'
		+'с клавиатуры:\n\tстрелками <- назад, или вперед ->\n\t(аналогично стрелками "вверх" и "вниз")\n\n'
		+'закрыть просмотр:\n\tвыбрать меню "закрыть"\n\tщелкнуть мышью примерно в центре картинки;\n\tкнопкой Esc с клавиатуры;\n\n--------------------------------------------------------------\n\n'
		+'Если наименование товара подчеркнуто - это ссылка на страницу товара';


и все спокнойно переносится и даже в ФФ табулируется. В норме, если это opaque string - как и следует из одинарных кавычек, то я получил бы \n в виде текста. Гавно этот ваш JS, согласен. :)

ЗЫ Да, чета я не нашел быстро функцию string() или там str_pad() для набора ------ видимо ее нет.

ruslan_mart 09.10.2014 14:24

В getElementById передаётся конкретно ID елемента, а вот в jQuery или querySelector передаётся CSS-селектор, который работает по правилам CSS.

Не понимаю, в чём проблема просто получить через getElementById или экранизировать квадратные скобки.

var elem = $(document.getElemenById('user[0]'));


var elem = $('[id="user\\[0\\]"]');

kostyanet 09.10.2014 14:25

То есть если 'внутри' как предполагается непрозрачной строки я размещаю "другой определитель строки" и он спокойно выводится как текст, то признак 'такая строки' непрозрачный, но из непрозрачной строки не может выйти перенос по \n и тем более \t.

В php 'когда надо сделать перенос так и делается'."\n" иначе получишь \n в тексте. А заключать весь текст в прозрачные кавычки - "черевато", может бНОПНЯ вылезти.

Так где вы говорите в JQ селект по id - ну так чтобы объект jq сразу получить?

kostyanet 09.10.2014 14:27

Цитата:

Сообщение от Ruslan_xDD
Не понимаю, в чём проблема просто получить через getElementById или экранизировать квадратные скобки.

Хорошо, тогда ПРИ ЧЕМ ТУТ getElementByID о котором в документации JQ написано с первых же строк? ЧТо они делают с аргументом перед тем как засунуть его в getElementById - если пишут что применяют именно API?

Второе - name в переменной, мне придется регой слэшить. Маразм.

kostyanet 09.10.2014 14:28

Цитата:

Сообщение от Ruslan_xDD
Не понимаю, в чём проблема просто получить через getElementById

Ну да, я получил а потом завернул его в JQ-объект. Маленький, но тоже маразмик.

ruslan_mart 09.10.2014 14:31

Цитата:

Сообщение от kostyanet
Второе - name в переменной, мне придется регой слэшить. Маразм.

А мне вот кажется, что давать для ID значение с квадратными скобками - маразм.

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

kostyanet 09.10.2014 14:31

Про документ.райт, специалистам, вот так пишите:

document.write('<div id="my_[lovely]_square[brackets]">I hate you too</div>');

и все должно быть чики-пуки. На php так все и пишут, а иначе как эти теги из echo отрендерить - слэшить что ли? Никто так не делает.

kostyanet 09.10.2014 14:33

Цитата:

Сообщение от Ruslan_xDD
А мне вот кажется, что давать для ID значение с квадратными скобками - маразм.

Это не я, это такие правила php парсера заголовков. Типа не знали что ли?

Да, конечно, но сначала надо обосрать то что есть для энтузиазма. :)

voral 09.10.2014 14:39

Цитата:

Сообщение от kostyanet (Сообщение 334341)
Хорошо, тогда ПРИ ЧЕМ ТУТ getElementByID о котором в документации JQ написано с первых же строк? ЧТо они делают с аргументом перед тем как засунуть его в getElementById - если пишут что применяют именно API?

что ж не понятного то? Не было бы смысла вообще чего то городить если-бы это 100% повторяло АПИ. Вы же в записи $('#elId') передаете не ид элемента, а селектор в понимании jQuery. Этот селектор парсится на составляющие. Если среди оных будет найден id значит будет использован
getElementById. Т.е. все упирается в разбор селектора. И тут вы обязаны правильно оформлять селектор (в понимании jQuery - ибо оно и парсит).

Согласитесь если вы в регулярку воткнете "elId[0]" то тоже получите не то, что ожидаете.И если вы будете пользоваться регуляркой то вам потребуется подчинится правилам оформления регулярных выражений. Здесь все то же самое вы пользуетесь конкретным продуктом, так и следуйте его правилам. В чем проблема то?

Что то не доработано и не привычно? Так что с того, мне после С/С++ весь JavaScript тоже мозг выносит.. Только недавно стал привыкать.... Но зауши то ни кто не тянет.

kostyanet 09.10.2014 14:41

Цитата:

Сообщение от Ruslan_xDD
А мне вот кажется, что давать для ID значение с квадратными скобками - маразм.

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

А когда занялся то споров уже не было - в редких кусках кода только попадались решетки, дизайнеры сочли что классы все-таки лучше. Поэтому я сделал умозаключение что никакой нормальный человек не будет пихать решетку в свой css и стало быть id теперь нормальный явный ключ к элементу.

Прежде чем давать всякие там id конечно же начитался спецификаций и практики - потому что всякое бывает. Из практики вытекало что id может быть любым и у меня бывали случаи косяков в php когда скрипт фигачил одни только числа - все пахало как из пушки.

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

В общем х с ними, буду теперь иметь ввиду что JQ так и остался зарешеченым.

voral 09.10.2014 14:44

Цитата:

Сообщение от kostyanet (Сообщение 334349)
На php так все и пишут, а иначе как эти теги из echo отрендерить - слэшить что ли?

Если что то требует слеша в php используется addslashes. Чем js хуже? Проблема сточку кода написать? И к прототипу строк прицепить?

kostyanet 09.10.2014 14:46

Цитата:

Сообщение от voral
Этот селектор парсится на составляющие.

Тут просто разница мировоззрений. Я по классам сроду ничего не выбирал. Класс это стили - а что там еще? Это стили, это рендер, мало ли какой где класс - это не может касаться структуры. Поэтому полагал что если кто-то выбирает по ID - к представлению оно не может относиться.

Что касается повторять API - ну и что, зато все логично - по id нашли одномоментно завернули в свой контекст.

voral 09.10.2014 14:47

Цитата:

Сообщение от kostyanet (Сообщение 334356)
Вы давно занимаетесь уеб-дизайном?

Казалось бы при чем здесь "дизайн"......
Цитата:

Сообщение от kostyanet (Сообщение 334356)
Я - примерно год.

Все встало на свои места. вспомнилась присказка про молодого водителя:
Цитата:

Я за рулем уже месяц, а чайники уже задолбали.

kostyanet 09.10.2014 14:47

Цитата:

Сообщение от voral
Если что то требует слеша в php используется addslashes.

Не слушайте профана, никто щас эту хрень не юзает. Это десять лет назад было популярно. По каментам можете сами даже увидеть в рефе функции.

voral 09.10.2014 14:51

Хорошо я с 14 летним стажем программирования на php буду слушать гуру со стажем 1 год....

А если читать все комменты и бояться - придется от всех фунций отказываться. Надо мозгом думать, что, зачем и в каких ситуациях использовать.....

kostyanet 09.10.2014 14:56

То есть у меня систематически можно наблюдать такие перлы

<div class="thumbs" id="thumbs">

потому что я сделал стили .thumbs и присвоил, но чтобы найти элемент думаю про ID и добавляю ID, а чтобы не придумывать лишнего - такой же.

Значит в терминах JQ я должен сделать стили #thumbs и применять только один id="thumbs" и все будет оформлено. Нет, я как бы знал что оно есть, но ни разу не подумал что оно может быть применимо. У меня не срастается в голове понятие структуры и представления в один кусок. ID - это признак из домена структуры, а class - из домена представления. Как же я их соединю, а вдруг чего-то там не туда, и все такое... поэтому

<div class="thumbs" id="thumbs">

и пох, все на своих местах.

kostyanet 09.10.2014 14:58

Цитата:

Сообщение от voral
Хорошо я с 14 летним стажем программирования

Во-во, видели таких дедушек на дорогах, у которых стаЖЖ 15 лет - перестраиваются не глядя в зеркала, потому что учились еще когда у Жигулей было 1 зеркало справа и то с ложку размером. :)

kostyanet 09.10.2014 15:01

Самая ирония в том, что я когда подключал JQ подумал: как хорошо что не придется писать эти длинные фразы document.getElementById(... х нанэ! придется :)

Я понял, спасибо всем. То есть user[0] должен быть классом. Типа class="user[0]" - ну конечно такого я бы не допустил и такого сроду не было. Но откуда мне было знать что по ID либа ищет по правилам CSS.

voral 09.10.2014 15:07

Цитата:

Сообщение от kostyanet (Сообщение 334369)
То есть у меня систематически можно наблюдать такие перлы

<div class="thumbs" id="thumbs">

Ну, все нормально. Элементов со стилем thumbs может быть сколько угодно, c id = thumbs только один.

Цитата:

Сообщение от kostyanet (Сообщение 334369)
Значит в терминах JQ я должен сделать стили #thumbs и применять только один id="thumbs" и все будет оформлено.

Тут я не поянл. Что за стиль такой с решеткой. И почему обязаны? Селектор jQuery != стиль CSS.

Через селекторы jQuery вы можете обращаться и по тегу, и по ид, и по имени, и по атрибутам..... а так же применять фильтры. Вот и нужно относится к этому селектору грамотно.

Цитата:

Сообщение от kostyanet (Сообщение 334369)
Нет, я как бы знал что оно есть, но ни разу не подумал что оно может быть применимо. У меня не срастается в голове понятие структуры и представления в один кусок. ID - это признак из домена структуры, а class - из домена представления.

Это не "признаки". Это свойства объектов по которым можно искать этот объект. С точки зрения объекта в структуре DOM: id - должен быть уникальным. свойство class используется браузером для "состыковки" c css. Но ни кто не запрещает использовать это свойство и нам, например, что бы отобрать несколько объектов по их назначению. Ведь грамотная верстка css тоже подчеркивает структуру документа.

voral 09.10.2014 15:10

Цитата:

Сообщение от kostyanet (Сообщение 334373)
Но откуда мне было знать что по ID либа ищет по правилам CSS.

По правилам jQuery. (не правда ли это логично, что у либы есть свои правила).

А вообще вместо потоков слов. Привели бы минимально необходимый кусок кода. Что то мне подсказывает, что вы городите какойто огород, там где можно обойтись "парой" строк.

kostyanet 09.10.2014 15:16

Но, что оно тогда находит по #user[0] ? - zero не возвращается, if(elem) проходит.

Откуда берется user[0] - это просто первое поле в форме которую сделал скрипт php по прототипу формы в объекте. Имя может быть любым, хоть с одной буквы, типа f[0]. Процессинг пользуясь прототипом все спокойно находит по индексам в отпарсенном php результате запроса. Но иногда нужны отношения между полями - как их сделать? Через data- теги что ли? По data- искать, ну, форма, конечно, не в 1000 полей, но все равно не кошерно. А если взять и соединить по name-id то все кайфово срастается. Кроме того у меня в datagrid по name-id связываются заголовки таблицы с полями которые вылезают в ячейках таблицы в режиме редактирования. У заголовков id, у полей name. Форма со своим namespace - лафа.

kostyanet 09.10.2014 15:18

Цитата:

Сообщение от voral
Это свойства объектов по которым можно искать этот объект.

Это атрибуты, а не свойства. Свойства там где-то в прототипе зарыты - вам они все равно не нужны. Ну типа там длина объекта, ширина адрес объекта, сигнатура, хренатура и протча. А в хмтльной модели нас интересуют только атрибуты.

voral 09.10.2014 15:19

Вы бы привел ихотя б html (можно в песочнице). По мне так и id то там не особо нужен.

voral 09.10.2014 15:25

Цитата:

Сообщение от kostyanet (Сообщение 334380)
А в хмтльной модели нас интересуют только атрибуты.

Вас да. Меня нет :)
Интересно, вы читали, например, учебник на этом сайте? Там хорошо расписано с таким отношением и при стечении обстоятельств может получить забавный баг, который не сможете понять. Без всяких jQuery.

не поленился нашел, там есть инфа для "отправной точки" http://learn.javascript.ru/attribute...tom-properties

kostyanet 09.10.2014 15:26

Цитата:

Сообщение от voral
Через селекторы jQuery вы можете обращаться и по тегу, и по ид, и по имени, и по атрибутам..... а так же применять фильтры. Вот и нужно относится к этому селектору грамотно.

Это вы можете, а мне ничего этого не нужно. Существует ровно 2 варианта: или по ID, или по типу ноды. По ID это т.с. single pattern, а по ноде - array pattern, то есть когда обрабатывается все что подвернулось.

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

Или в чем глубокий смысл выбора по всей этой тряхомудии?

kostyanet 09.10.2014 15:29

Это он так обучается, да, есть такой способ - вступить в спор и таскать на осмотр всякую хрень и запоминать что сказали о какой хрени. Я же вам написал что свойства объекта нас не колебут - я даже ни одного не знаю. Нас колебут атрибуты - а вы их назвали свойствами. Атрибуты - это не свойства.

ruslan_mart 09.10.2014 15:44

kostyanet, не вижу ничего плохо в использовании # в CSS. Всё зависит от ситуации. Всё просто: class - несколько элементов, id - один.

Если у тебя допустим есть какой-нибудь уникальный элемент, у которого есть ID и ему нужно применить уникальный стиль, то класс будешь писать?

Кстати, если я не ошибаюсь, то в CSS решётка быстрее обрабатывается.

voral 09.10.2014 15:45

Цитата:

Сообщение от kostyanet (Сообщение 334383)
Ну нахерач туда этих ID хоть на все подряд и селектируй однозначно.

Ну так нафиг вы в jQuery то полезли тогда? Делайте как считаете нужным. Удобно вам так. Ну дак делайте.

voral 09.10.2014 15:51

Цитата:

Сообщение от kostyanet (Сообщение 334384)
Атрибуты - это не свойства.

Да вы прям открыли глаза мне.... Что ж вам все разжевывать то надо.... Фиг с вами отсутствия умения читать и понимать не моя проблема.

Ни кто не запрещает заниматься велосипедостроем.
Это уж не раз в ИТ проходили. Писали на чистых сях и не было понятно зачем либы. Теперь "чистые" си только для специфичных кусков кода. И так во всех языках..

danik.js 09.10.2014 16:00

Цитата:

Сообщение от Ruslan_xDD
Если у тебя допустим есть какой-нибудь уникальный элемент, у которого есть ID и ему нужно применить уникальный стиль, то класс будешь писать?

Да. У мня например на странице секции имеют id, в качестве якорей.
А якоря - вещь непостоянная.
Я дополнительно проставил классы, и сплю спокойно.

kostyanet 09.10.2014 16:25

Цитата:

Сообщение от Ruslan_xDD
Всё просто: class - несколько элементов, id - один.

Уже раза три пытался объяснить тренд. class - это идентификатор набора стилей в css, больше ни на что он не годится. Сегодня у меня такой класс, завтра я придумал другой, потом еще кнопкой на сайте юзер их переключает запростяк - короче это XSL. ID - это ID, никакого отношения к оформлению не имеет, однозначно идентифицирует элемент. Например в ID валятся ID из БД. Ну при чем тут какие-то padding-top: 5em, если в ID валятся ID из БД. Это XML. Понимаете в чем тут разница понимания?

И вообще, методом исключения JQ должен выйти на конечнную инстанцию - на opaque id, потому что в списке ничего не подходит под шаблон user[0]

http://api.jquery.com/category/selectors/

А мне возвращают не zero, а какую-то бНОПНю кроме того.

kostyanet 09.10.2014 16:33

Щас попробую донести

<div>
  <id>9</id>
  <text>Ones upon a time a little chick starts suck big dicks...</text>
  <class>LovelyHistory</class>
 </div>


Так должно быть, правильно? Мы имеем право засунуть в структуру информацию об оформлении, но не само оформление. Ну как имеем право - так не XML не делается, но кто нам запретит - это же не оформление, а данные об оформлении (представлении).

Вот так я и понимаю id и class, как компромисс между уебищем под названием html и идеалом под названием xml.

kostyanet 09.10.2014 16:46

Цитата:

Сообщение от danik.js
А якоря - вещь непостоянная.

Я тут явно что-то не понимаю. Есть такие методы classList.toggle(); .remove(); .add(), но я не припомню методов типа id.toggle(); id.remove() итд.

Так кто постоянный, а кто дрыгается как цыпленок на сковородке от каждого тычка юзера?

Ну то есть что может произойти с id вообще?

kostyanet 09.10.2014 16:58

Вот он список, кстатЕ

!"#$%&'()*+,./:;<=>?@[\]^`{|}~

надо же, блин, ну вроде я знал что по id и стили завязываются, но верил что никто этой тряхомудией давным давно не пользуется. Ну там на древних сайтах где еще так <IMG ALIGN=CENTER... оно может попадаться...

danik.js 09.10.2014 17:46

Цитата:

Сообщение от kostyanet
Ну то есть что может произойти с id вообще?

Ну например клиент его изменит, потому что якорь отображается в адресной строке и клиенту что-то не понравится. Если при этом сломается верстка, он посчитает меня криворуким, причем не безосновательно )

kostyanet 09.10.2014 17:58

Как это клиент изменит id по хешу? Короче, непостижимые для меня проблемы - а как это еще верстка сломается если хеш вбить левый?


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