Где хранить 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, время: 16:44. |