|
|
|
| Постояно пишу на пхп, яваскриптом приходится редко. Но думал, что в нем проблем у меня нет, пока не столкнулся с задачей... И вот, думаю, то ли это недостаток моих знаний, то ли это невозможно нормальным способом... Задача:
<div>
<p><a href="#">ссылка</a></p>
</div>
при щелчке по ссылке нужно определить ее родительский элемент, чтобы appendChild в него блок div с некоторым содержанием. Теоретически можно innerHTML самой ссылке изменить, но на практике, в добавляемом блоке должна быть кнопка, вызывающая removeChild. Есть и другие причины не трогать саму ссылку. Вобщем, нужно получить, по крайней мере, содержащий ссылку абзац (а в идиале, блок div, конструкцией типа if(parent.tagName != 'div'){как-то получить вышестоящий элемент}), чтобы потом appendChild в него нужный блок. При чем, мне, по крайней мере, показалось, что ИЕ не appendChild div во внутрь абзаца. Поэтому, чтобы вставить див, хочется получить доступ именно к блоку.
Вобщем, буду признателен. если кто-то покажет рабочий код. | |
|
|
|
|
|
|
|
для: kosta_in_net
(19.11.2010 в 07:51)
| | Что-то много слов, а так и не понятно чего вам в конечном итоге надо.
<div>
<p><a href="#" onclick="alert(this.parentNode.tagName); alert(this.parentNode.parentNode.tagName);">ссылка</a></p>
</div>
|
| |
|
|
|
|
|
|
|
для: sim5
(19.11.2010 в 08:00)
| | Оказывается проблема была в другом месте. Вот так работает:
<div>
<p><a href="#" onclick="return addnode(this);">ссылка</a></p>
</div>
<script>
function addnode(elem){
while(elem.parentNode.tagName != 'DIV'){
elem=elem.parentNode;
}
var newelement = document.createElement('div');
elem.parentNode.appendChild(newelement);
newelement.innerHTML="<div><p>текст в блоке</p></div>";
return false;
}
</script>
|
а вот так нет:
<div>
<p><a href="javascript:addnode(this); void(0);">ссылка</a></p>
</div>
<script>
function addnode(elem){
while(elem.parentNode.tagName != 'DIV'){
elem=elem.parentNode;
}
var newelement = document.createElement('div');
elem.parentNode.appendChild(newelement);
newelement.innerHTML="<div><p>текст в блоке</p></div>";
}
</script>
|
Кто-то знает почему? Разница именно в ссылке. Хотелось убрать онклики :( | |
|
|
|
|
|
|
|
для: kosta_in_net
(19.11.2010 в 10:13)
| | >"Кто-то знает почему?"
Покликайте, мей би, поймёте:
<a href="#" onclick="alert (this.tagName)">Link_1</a>
<a href="javascript: alert (this.tagName)">Link_2</a>
|
| |
|
|
|
|
|
|
|
для: АЯ
(19.11.2010 в 11:31)
| | то есть, у меня не получалось, потому что это впринципе невозможно? Я просто стараюсь избегать конструкции типа
<a href="#" onclick="alert (this.tagName)">Link_1</a>
так как второй вариант показывает, что если скрипт откючен, делать ничего не нужно:
<a href="javascript: alert (this.tagName)">Link_2</a>
В отличие от него, первый вариант, при отключенном скрипте перейдет на якорь. Но это ведь никому не нужно...
Но то, что для второго варианта ничего не определено, мне в голову не приходило. С виду, вроде, тождественно.
Как я и писал в начале поста, жабаскрипт мне не очень привычен... | |
|
|
|
|
|
|
|
для: kosta_in_net
(19.11.2010 в 12:01)
| | Значится, не поняли...
Попробую ещё раз.
Покликайте:
<html>
<head>
<script>
window.name = 'WINDOW_9876543210';
</script>
</head>
<body>
<a name="LINK_02468" href="#" onclick="alert (this.name); return false">Link_1</a>
<br>
<a name="LINK_13579" href="javascript: alert (this.name)">Link_2</a>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: АЯ
(19.11.2010 в 13:08)
| | имеется в виду, что в одном случае, this - это ссылка, а в другом - окно и, стало быть, парент для него отсутствует? Мне кажется, русскими словами это проще написать. И как-то быстрее доходит.
Но становится любопытно: почему окно? Ведь ссылка же щелкается! Какие теоретические основы у этого феномена? А то как-то... вроде... не логично. | |
|
|
|
|
|
|
|
для: kosta_in_net
(19.11.2010 в 21:47)
| | И опять Вы не поняли.... как же до Вас туго доходит?
Но ладно... будем терпеливы.
Покликайте ещё раз:
<html>
<head>
<script>
window.name = 'WINDOW_9876543210';
</script>
</head>
<body>
<a name="LINK_02468" href="#" onclick="alert (this.name); return false">Link_1</a>
<br>
<a name="LINK_13579" href="javascript: alert (this.name)">Link_2</a>
<br>
<a name="LINK_TARGET" href="javascript: alert (this.name)" target="BUBUBU">Link_3</a>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: АЯ
(19.11.2010 в 22:36)
| | в чем суть? В том, что в яваскрипт-урл this определяется таргетингом ссылки? При отсутствии атрибута target, он, естественно, текущее окно? Я не мыслю кодами. Я мыслю идеями. Идею укажите. Так как я не знаю, что вы хотите сказать своим кодом. Но на русской языке я понимаю запросто. | |
|
|
|
|
|
|
|
для: kosta_in_net
(20.11.2010 в 01:26)
| | 1. Ссылка (тег <A>) - это такой элемент, по клику на который управление передаётся окну, указанному в атрибуте target (по умолчанию имеющего значение "_self") и уже в этом окне ПОСЛЕ передачи управления окну происходит:
- или изменение адреса документа на URL, прописанный в атрибуте HREF этого тега;
- или исполнение скрипта, если в HREF используется протокол javascript:;
- или открытие дефолтной почтовой программы, если в HREF используется протокол mailto:;
и т.д. и т.п...
2. Событие onclick происходит ДО передачи управления окну.
Чуть-чуть РАНЕЕ.
И именно поэтому эту передачу управления ЕЩЁ можно отменить, написав return false.
3. this - это текущий объект.
В момент onclick текущий объект (this) - это тег <A>, по которому кликнули.
После передачи управления текущий объект (this) - это окно.
-----
Неужто до этой простой мысли/идеи Вы не смогли дойти САМИ, имея в своём распоряжении кучу специально подобранных мною примеров?
Мей би, программирование - оно не Ваше дело?
Мей би, Вам лучше попробовать научиться коров пасти?
Я безо всякой иронии, ибо "все профессии нужны, все профессии важны"...
И лучше всего, если человек будет заниматься ТЕМ, что у него получается. | |
|
|
|
|
|
|
|
для: АЯ
(20.11.2010 в 01:45)
| | Если программирование не мое дело, то уж тем более, оно не ваше. На конкретные вопросы я не даю неконкретных ответов. Я спросил о теоретическом базисе, предупредив, что яваскрипт - не моя стихия. А мы мне абстрактные примеры... Вы и программируете так? Компьютер понимает двузначную логику. Да/Нет. Третьего не дано. Именно так он программируется. Именно этим я и оперирую. Программный код для получения родительского элемента я написал не задумываясь. Проблема была именно в том, как его вызвать. Я не знал об отличии яваскрипт-урла от онклика. Я считал (не зная что "управление передаётся окну"), что раз схема урл яваскрипт, то никакой передачи окну не происходит. Конкретно я просил сказать мне об этом. В начале я не понимал разницы между онклик и яваскрипт-урл. Но когда sim5 написал:
<div>
<p><a href="#" onclick="alert(this.parentNode.tagName); alert(this.parentNode.parentNode.tagName);">ссылка</a></p>
</div>
|
и я, ради смеха (не веря, что это сработает), проверил. Оно заработало. В отличие от моего
<div>
<p><a href="javascript:alert(this.parentNode.tagName); alert(this.parentNode.parentNode.tagName);">ссылка</a></p>
</div>
|
Тогда стало ясно, что заморочка именно в неправильной ссылке. Иначе говоря, незнании разницы между способами вызыва.
Об этом я и спросил в итоге: почему окно? Ведь ссылка же щелкается! Какие теоретические основы у этого феномена?
В итоге вы начали показывать примеры. Но это не было ответом на мой вопрос. Ответом было бы "При щелчке по ссылке управление передается таргету (который по умолчанию - родительское окно), если передачу не перехватить онкликом и, соответственно, текущим элементом является окно или другой элемент, назначенный в атрибуте target".
Поскольку вместо такого ответа, вы начали ходить вокруг да около, возникает два предположения: Либо вы не способны правильно формулировать мысль и программирование не ваш конек, так как прямой код невозможно построить кривой логикой, либо вы решили поиздеваться надо мной, пользуясь превосходством в теоретическом знании.
В любом случае, вы помогли и, за это вам спасибо. Но на будущее, все таки просьба давать прямые ответы. | |
|
|
|
|
|
|
|
для: kosta_in_net
(20.11.2010 в 10:38)
| | >Компьютер понимает двузначную логику. Да/Нет. Третьего не дано.
Это далеко не так. | |
|
|
|
|
|
|
|
для: sim5
(20.11.2010 в 11:12)
| | обоснуйте | |
|
|
|
|
|
|
|
для: kosta_in_net
(23.11.2010 в 20:02)
| | Некогда да и незачем. Слышком вы утрируете компьютер, видимо эта упрощенность является и причиной ошибки ваших представлений выше - вы думали "щелк" и дело в шляпе, а оказалось все не так. | |
|
|
|
|
|
|
|
для: sim5
(23.11.2010 в 20:25)
| | ...и тем не менее, я в одиночку делаю такие сайты http://808.su/ | |
|
|
|
|
|
|
|
для: kosta_in_net
(26.11.2010 в 04:25)
| | И что? Я "в одиночку" гораздо более серьезные вещи делаю, детей, но это еще не означает, что я создатель ;-) | |
|
|
|
|
|
|
|
для: sim5
(26.11.2010 в 10:47)
| | А то, что не все так плохо, как могло показаться :) | |
|
|
|
|
|
|
|
для: kosta_in_net
(26.11.2010 в 04:25)
| | довольно посредственный сайт. и чем он лучше миллионов других? | |
|
|
|
|
|
|
|
для: psychomc
(26.11.2010 в 11:26)
| | Покажите мне менее посредственный, сделанный лично вами, без участия других людей. Если показать нечего, значит вы делаете еще более посредственные. | |
|
|
|
|
|
|
|
для: kosta_in_net
(26.11.2010 в 17:43)
| | вот http://www.bikini.by делал всё сам (кроме дизайна, дизайн заказчик предложил взять у поставщика) в прошлом году. сейчас все делаем в команде. кое-что из последних http://www.autopart.by почти все написано мной.
p.s хвалиться и меряться всякими органами не интересно. я ответил тогда вам к тому, что вы здесь никого из присутствующих не удивите тем, какие вы сайты делаете. | |
|
|
|
|
|
|
|
для: psychomc
(26.11.2010 в 17:52)
| | И что, bikini.by чем-то лучше? Миниатюры по 160 килобайт это хорошо? Неудобство помещения товара в корзину, это хорошо? Поиск, который не всегда работает http://shop.bikini.by/category.php?store=1&category=search&searchword=7890873040547&x=7&y=11 это хорошо? Хотя реально искомый товар есть http://shop.bikini.by/product.php?store=1&category=34&product=156
Или, может быть, хорошо то, что входная страница магазина http://shop.bikini.by/store.php?store=1 со всеми потрохами весит 425 килобайт, в основном из-за того, что кто-то не догадался, что миниатюры не должны иметь размер в 600 пикселей?
Вот именно bikini.by действительно банально. Не ужасно, но именно банально и имеет ряд недоработок. Сравнение тут не в вашу пользу.
А по поводу хвалиться и меряться: кто тут хвалится? Я показал, что, несмотря на некоторые пробелы в знании яваскрипта, делаю сайты, которые, в том числе, интенсивно используют этот самый яваскрипт. И что, хотя я местами и не знаю чего-то (а кто знает ВСЁ?), на деле я не такой новичек, как, судя по всему, показалось sim5. А то, что вы считаете, что я хвалюсь указывает лишь на ваши собственные грешки. Ну а после того, как вы кинули камень в мой огород, мне и стало интересно, кто ж этот Великий Мастер, для которого работы, котрые я считаю хорошими, являются посредственностью.
И что оказалось? Великий Мастер оказался мастером только по части кидания камней.
Так что, прежде чем ругать других, поругайте себя за собственную халтуру.
Что касается www.autopart.by - хороший современный сайт, приятное исполнение... Но это коллективная работа, да еще и с использованием сторонних модулей (например, jquery). | |
|
|
|
|
|
|
|
для: kosta_in_net
(26.11.2010 в 19:50)
| | Когда кажется, тогда крестятся, а я несуеверный.) Я лишь хотел сказать, что упрощение понятий может привести к ошибкам, а тем более не знание материала. Вот об этом я вам и сказал, без всякого кажущегося.
Нет в компьютере понятия Да/Нет, если вы подразумеваете логику на которой он работает. Есть только логический 0 и логическая 1, будут ли они просто таковыми, скажем так "пассивными данными", либо это будет некое утверждение, как "да/нет", это уже решается на уровне микропрограммного кода процессора и чипов, на которых собран компьютер, а также программистом пишущем для него программы. Но кроме логических 0 и 1 существует еще очень важное третье состояние логики - "выключено", и без этого состояния невозможна работа уже самого процессора, его узлов, они не смогут использовать общую шину данных, адресов. Тоже самое и у переферийных устройств по отношению к процессору. Вот вам и "третьего не дано".
Что вы там написали, чего еще напишите, это не так важно, тем более чем хвалится, если вы сами говорите "что несмотря на некоторые пробелы в знании яваскрипта, делаю сайты, которые, в том числе, интенсивно используют этот самый яваскрипт". Чтобы ваш JS при этом отменно работал, вы должны либо использовать чужой и качественный, либо писать свое, но настолько грузное и изобилующее излишеством, что трудно будет сказать по такому коду, что он "гут". Собственно написать сейчас можно что угодно, при этом вообще имея слабые представления не только в JS, серверных языках, HTML, но и вообще обо всем. А что готовых шаблонов в сети куча, готовых скриптов/движков тоже немало, там выдрал кусок, там еще, склеил, поскакал по формам, поспрашивал немного "а почему?", подправил и будет работать.
Но коли у вас есть знания, это хорошо, пишите ну слава богу, но вы "ополчились" на того, кто в отличии от вас владеет JS по полной программе, и заметьте, при этом своими сайтами не козыряет, дабы сказать, что, а пофигу что там ляп, зато красиво. Вам заметили верно, а вы не захотели понять того, о чем вам сказали. | |
|
|
|
|
|
|
|
для: sim5
(26.11.2010 в 20:44)
| | Обсуждение "да/нет" большого смысла не имеет. А вот мой яваскрипт отменно работает именно потому, что я не использую чужие скрипты. Рассуждая о грузности, стоило бы посмотреть, действительно ли скрипты грузные. В 2003-2005 я написал практически все, что мне нужно на яваскрипт и, с тех пор, ничего существенного делать на нем не приходится. Поэтому я напрочь его забыл.
Готовых шаблонов я не использую так как то, что нужно мне, никто лучше меня не сделает. И если я иногда задаю вопросы, то только потому, что работая сразу с CSS, HTML, Javascript, .htaccess, PHP, SQL (не считая еще нескольких языков программирования под виндовс), не могу досконально знать все. На это просто не хватает времени. Я вообще сомневаюсь, что есть кто-то, кто знает все досканально. | |
|
|
|
|
|
|
|
для: kosta_in_net
(27.11.2010 в 18:06)
| | Райдуйтесь, коли у вас все Ок. Вот только если вы не знаете хорошо предмета (о чем вы сами упомянули), то не надо мне втирать по мозгам, что все в нем у вас на 5. | |
|
|
|
|
|
|
|
для: sim5
(27.11.2010 в 19:16)
| | Вы меня улыбаете :)
Прежде чем говорить, что все плохо, нужно найти хоть один повод | |
|
|
|
|
|
|
|
для: kosta_in_net
(26.11.2010 в 19:50)
| | уж простите, к продвижению этого сайта я отношения не имею , а информацию туда заливает только заказчик. причем сайт работает именно так как он хотел. плюс бикини был сделан в свободное время менее чем за месяц. так вот...к чему я это всё скинул.. к тому что вы написали, что делаете такие сайты, с акцентом на то, что это ваш сайт очень хороший, и что вот какой вы молодец, что умеете и т.п. а я всего лишь ответил что это обычный сайт и здесь никого этим не удивишь, да и не надо этого (никаких в этом камней не было, кстати).
естественно не мог же я в ответ не привести ссылки, а то даже страшно представить что бы вы обо мне подумали :)
p.s надеюсь без обид | |
|
|
|
|
|
|
|
для: psychomc
(26.11.2010 в 20:58)
| | Какие обиды? :)
Но мой сайт ОЧЕНЬ хороший :)
Разве я показал бы его, если б считал плохим? ;)
А удивлять я вовсе не собирался. Просто иногда меня принимают за новичка. Вот и показал, что это не так. | |
|
|
|
|
|
|
|
для: kosta_in_net
(26.11.2010 в 21:15)
| | ну я то не спорю, сайт нормальный, сайт как сайт :)
но такой же как и многие другие :)
и это кстати, не значит плохо | |
|
|
|
|