Где хранить id
На сайте несколько меню, которые генерируются скриптом. Например ul.#menu1 и ul.#menu2, у каждого элемента внутри свой айдишник.
Логично было бы хранить их как li.#1, li.#2, ... Но т.к. меню два, то айдишники элементов будут повторяться, чего быть не должно. Поэтому храню как li.data('id',1), li.data('id',2), ... Насколько плох первый способ (li.#1, li.#2, ...)? Действительно ли так критичен повтор в атрибуте id? |
а почему не class?
|
Shitbox2, а зачем вам эти как бы id?
Цитата:
|
Цитата:
|
Deff, ты упустил один момент. Вопрос задан в контексте jQuery. А jQuery использует getElementById для селекторов типа #id. А getElementById возвращает только один элемент, причем какой из всех - спецификцией не определено.
|
Если обернуть каждое меню в div c разными Id,
То достаточно просто обеспечить поиск идентичных Id в контексте данных разных оберток <script src="http://code.jquery.com/jquery-latest.js"></script> <div id=Wrp1> <ul id=menu>Тут меню 1 </ul> </div> <div id=Wrp2> <ul id=menu>Тут меню 2 </ul> </div> <script type="text/javascript"> var div1=$('#Wrp1'); var div2=$('#Wrp2'); alert($('#menu',div1).text()+'\n'+ $('#menu',div2).text()) </script> |
Цитата:
|
<script src="http://code.jquery.com/jquery-latest.js"></script> <div id=Wrp1> <ul id=menu>Тут меню 1 </ul> </div> <div id=Wrp2> <span>участвует?</span> <ul id=menu>Тут меню 2 <span>и каким боком здесь #menu участвует?</span></ul> </div> <script type="text/javascript"> var div1=$('#Wrp1'); var div2=$('#Wrp2'); alert($('#menu',div1).text()+'\n\n'+ $('#menu span',div2).text()) </script> |
рони,
Cуть задачи поставить две менюшки с идентичными тегами и разным контентом и по возможности или использовать один скрипт для их работы(к примеру скрытия вкладок) для обоих меню; либо два скрипта, - второй скрипт с минимальными правками: Пока две версии правки для варианта c двумя скриптами: поправить все ID во втором скрипте и самом контенте меню: #menu на #menu-2, либо обернуть каждое меню в свой div и заменить в скрипте: "#menu" на "#menu",div2 |
Deff,
Подскажите где про $('#menu',div1) такую выборку прочитать можно? вот так бы я понял $("#Wrp2 #menu span").text() |
Дзен-трансгуманист,
спасибо |
NodeList с поиндексным доступом. Что за зверь такой? А как не хранить id? Каждый пункт меню должен содержать информацию в себе для связи с БД. Пункт может удалить или изменить себя или поменять положение в списке, но связь не должна нарушаться
|
<ul> <li>Item 0</li> <li>Item 1</li> <li class="item">Item 2</li> </ul> <script> var nodeList = document.querySelectorAll('ul li'); alert( nodeList[1] ); var item = document.querySelector('.item'); // приведем NodeList к Array var array = Array.prototype.slice.apply(nodeList); alert ( array.indexOf(item) ); </script> для jQuery соответственно это $(el).index(); |
Shitbox2,
Заготовить массивы элементов для каждого меню тогда удобнее проставлять классы(или даже тегов достаточно), нет смысла в id, <ul> <li>Контент1 <li>под-Контент1</li> </li> <li>Контент2</li> <li>Контент3</li> </ul> [ li.[Контент1,li.[под-Контент1]], li.[Контент2], li.[Контент3] ] |
Вобще, без толку гадать пока Shitbox2 не объяснит нормально че к чему.
|
Цитата:
Загружаете туда фотки (хоть всю папку кидаете), он создает для каждой элемент LI и этому элементу присваивается id-шник строки с картинкой из БД. Фотке можно приписать заголовок, соответственно поле обновляется по этому id, при удалении фотки на сервер так же отправляется запрос с удаляемым id, если поменять миниатюры местами, отправится список всех id в новом порядке. Сейчас id хранятся в $('li').data(). Это вполне удобно, но пустует специально созданный для такого атрибут id |
Цитата:
|
Цитата:
<li idRec='ИД_из_БД'>...</li> Т.е. не обязательно смешивать ИД записи в БД и ИД ДОМ-элемента... |
Цитата:
|
Цитата:
|
Цитата:
Тем более что в перспективе - это доступ через свойство element.dataset.* |
Цитата:
|
ksa, ты наверно так страницы верстаешь:
<!DOCTYPE html MYDOCTYPE> <html> <body> <style> шапка{ ... } </style> <шапка> <меню>...</меню> </шапка> <абзац></абзац> </body> Какая разница что нужно использовать <header> и <nav> - кого это волнует? Так то удобнее! :D |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
По слухам $elem.data('id') работает быстрее чем $elem.attr('data-id'), т.к. первый не обращается к DOM. Это так?
|
Shitbox2, у тебя там сверхнагруженное приложение, в котором обращение к id идет миллионы раз в секунду? Тогда да, первое быстрее.
|
Нет, не высоконагруженное. Но если нет разницы, зачем платить больше? Еще в jQuery $elem.data('id') практически равен $elem.attr('data-id').
Т.е. <div data-id="9"></div> $('div').data('id') вернет 9, хотя обратная запись работать не будет. Дата-атрибуты можно использовать как значения по-умолчанию, больше плюсов в них не насмотрел... |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
<!DOCTYPE HTML> <html> <head> <title></title> <meta charset="utf-8" /> <script src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <div data-id="9"></div> <script type="text/javascript"> var id = $('div').data('id'); alert(id); $('div').data('id', 10) id = $('div').data('id'); alert(id); </script> </body> </html> |
Цитата:
Цитата:
|
рони, ты не понял. ('div').data('id', 'xxx') не меняет значение атрибута data-id
|
danik.js,
ок |
Цитата:
|
Цитата:
<!DOCTYPE HTML> <html> <head> <title></title> <meta charset="utf-8" /> <script src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <div data-id="9"></div> <script type="text/javascript"> var id = $('div').data('id'); alert(id); $('div').data('id', 10) id = $('div').data('id'); alert(id); $('div').wrap("<div></div>"); alert($('div').html()); </script> </body> </html> |
рони, так я и не понял почему второй алерт показал 10... :(
|
ksa,
видимо потому что дата работает свойством обьекта когда он есть/был проинициализирован data('id', 'xxx') а не с атрибутом. |
Цитата:
А я уш было обрадовался такому методу... Непонятки получаются. Вроде как значение атрибута осталось (что мне и нужно), а взять то значение - банан! |
Часовой пояс GMT +3, время: 08:22. |