Как стать автором
Обновить

Комментарии 85

Решение для target=«blank» можно перефразировать по другому. «Запрещено ездить непристегнутым? Так пристегнитесь, но когда милиционер не видит — можно ремень снять» :)
Безусловно, лучше было бы $('a[@rel$='external']').click(function(){ window.open(…
Безусловно лучше бы было, если бы W3C не плодил идиотских запретов и правил. Их и так в стандарте предостаточно. А уж если бы и плодил в одном стандарте, то в последующих их не отменял.
Это соображение также справедливо.

С другой стороны, я полагаю, что запрет W3C был вызван стремлением к тому идеалу, согласно которому пользователь должен сам решить заранее, будет ли гиперссылка открываться именно в новом окне, или же нет.

Но сейчас есть масса простых бесхитростных технических средств, которые позволяют пользователю вырубить target="_blank" напрочь, ежели он того возжелает; так что запрет выглядит как бы ужé и излишним.
Вообще-то справедливости ради нужно сказать, что target запрещен только в strict. Так же как и iframe.
Но все равно непонятно зачем такая непоследовательность. Постоянно используемый, опять же из-за кривизны стандартов iframe исключен из strict, зато куча тегов, которые практически никем не используется (по назначению) типа dfn, cite, acronym, abbr потащили в xhtml2
нет там никакой непоследовательности. просто там используется другая концепция… d-o-b.ru/?article:kill.html
xhtml — язык только лишь гипертекстовой разметки. а iframe — это виджет для создания веб-приложений
Любопытно, почему object — хорошо, а iframe — плохо? Логичнее было бы наоборот.
Или микрософтовские корни iframe застят глаза W3C?
объекты могут вкладываться друг в друга для обеспечения максимальной совместимости.
Ну в iframe как раз совместимость 100% и обеспечивается стандартами w3c, а вот продекларированная совместимость вложенных объектов в obj окажется пшиком, потому что реализация будет 100% зависеть от конкретных реализайций.
ты говоришь так, буд-то object появился только вчера и никто ещё не попробовал им воспользоваться =)
Ага и широко пользоваться object им начали значительно позже чем iframe. Т.ч. по всем параметрам iframe должен был войти в strict.
он банально не вышел названием =)
впрочем, в xhtml2 любой элемент может выступать в качестве iframe или object или img или embeed
Я использую <abbr> повседневно, а не то как же ещё аббревиатуры помечать в Паутине?
>Я использую повседневно,
У вас на сайте (www.mithgol.ru) на первой странице нет ни одного abbr, аббревиатур типа FAQ, Фидонет, MP3, DOS и т.п.

>a не то как же ещё аббревиатуры помечать в Паутине?
А зачем? Более важные по смыслу email, phone или Фамилия Имя Отчество не имеют своих собственных тегов. И как-то обходятся. Или используют микроформаты.
1) А я не на персональном полузаброшенном сайте, я на других.

2) Firefox понимает <abbr>, подчёркивает пунктиром, подсказку всплывающую устраивает.
1) Я верю, что начиная с 2006 года на _других_ сайтах, даже в [abbr]ЖЖ[/abbr] вы всегда заключаете в тег abbr такие слова как «колхоз», «интернет» и конструкции типа «и т.д.» «и т.п.»
Но вы человек исключительный.

2) Firefox понимает, подчёркивает пунктиром, подсказку всплывающую устраивает.
теги marquee и blink имели еще более выразительные средства. Но к счастью их прибили.
Подсказка при отсутствии title — какое-то сомнительное достижение.
Отплюсовал расово верный комментарий и совсем не додумался посмотреть на ник написавшего… о боже, мицгол!
диагноз: синдром мицгола в поле фром
>диагноз: синдром мицгола в поле фром
Нет Фромм здесь не причем. Здесь Ганушкин и Кащенко.
Так-то!
как по мне так правильно запрещают. хочу сам контролировать — открывается ссылка в новом окне или в текущем.
Я тоже хочу сам контролировать, только как разработчик, — будет ссылка у вас открываться новом окне или в текущем
НЛО прилетело и опубликовало эту надпись здесь
Странные люди — пользователи хабра. Единственный логичный ответ почему-то вызвал несогласие.
Тогда почему бы не запретить style атрибут?
Важная поправка.

Как на habrahabr.ru/blogs/jquery/54306/#comment_1448261 верно было подмечено, кавычки (окаймляющие или внутренние) должны быть сделаны двойными, ведь если одинарные и там и там, то не сработают.
Полезно понимать разницу между атрибутом HTML-элемента и свойством Javascript-объекта. Если атрибут запрещён в HTML-коде как несемантический, то это никак не отражается на легитимности свойства, определяющего поведение Javascript-объекта.
Да, но все же DTD влияет на работу с DOM, возьмите к примеру document.all в Gecko, который доступен только в Quirks Mode, или scrollTop для document.body и document.documentElement в Internet Explorer. Нет уверенности, что не выйдет новая версия браузера с каким нибудь Super Standards Compliance Mode, в котором будут игнорироваться не описанные в DTD атрибуты тегов, для которых браузер должен автоматически синхронизировать соответствующие свойства DOM-элементов.
Это крайне маловероятно, особенно учитывая, что в грядущем HTML5 атрибут target снова разрешён.
Прям какая-то мыльная опера…
Просто теория столкнулась с практикой. ;-)
НЛО прилетело и опубликовало эту надпись здесь
Вероятность же, что браузеры реального веба начнуть обращать внимание на DTD (который вот-вот отомрет с приходом HTML5:), имхо, строго равна нулю.
А сейчас браузеры не обращают внимание на DTD?
НЛО прилетело и опубликовало эту надпись здесь
Да браузеры не грузят каждый раз указанный файл с доктайпом, но речь то не об этом. Проблема в том, что от DTD зависит работа с DOM в Javascript и CSS. Да сейчас отличия только в режимах без доктайпа (QuirksMode) и c DTD (Standards Compliance Mode), а между версиями Transitional и Strict в XHTML 1.0 врятли в работе Javascript найдутся отличия, но кто может гарантировать что теже евангелисты из Mozill'ы не сделают в очередной новой версии браузера бесполезным для работы в режиме Strict, к примеру, такой код:
document.createElement("iframe")
или
element.setAttribute("target", "_blank")
Да я согласен, что это маловероятно :-) просто если есть возможность следовать стандартам, лучше так и делать :-) хотя бывают и исключения.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
А разве символ "@" при выборке атрибутов не стал устаревшим? По-моему, сейчас надо писать так:
$('a[rel$='external']').click(function(){
 this.target = "_blank";
});


да, вы правы, добавлю комментарий
$('element').size(); — можно еще обращаться к свойству length, если не ошибаюсь, эффект будет тот же.
Всегда использовал только length, про size впервые сегодня узнал
Ссылки target=blank

А не лучше ли тогда уже полностью по стандартам?

$('a[@rel$='external']').click(function(){
this.onclick = function(){ window.open(this.href) }
});
согласен, добавил комментарий в статье
В отличие от window.open, при использовании target все браузеры (а не только Firefox) передают заголовок referer.
+ см. чуть выше.
>>Определение браузера
Ага, попробуйте потом за кем-нибудь такую мешанину кода разобрать.

>>Вот что я называю очень простым, но очень полезным советом
>>Вы когда-нибудь хотели иметь возможность удалять
Эм… Промт?

Честно говоря, на «хитрость» не тянет.
продолжение следует? тонкостей больше :)
Что-то никакие это не тонкости. Это банальности.
> Вы используете атрибут target=blank для ссылок? Если да, то вы должны знать, что XHTML 1.0 Strict не позволяет этого делать

зато xhtml 1.1 позволяет.

> $('element').size()

ух уж эта хитрая документация ;-)

> $.preloadImages(«image1.gif», "/path/to/image2.png", «some/image3.jpg»);

а как же отделение оформления от поведения?

> в jQuery 1.3 и выше $.browser считается устаревшим и не рекомендуется к использованию, вместо этого рекомендуется использовать $.support.

да-да, как через support определить размер смещения при поэкранном листании (пробелом, например)?

> el.html(el.html().replace(/word/ig, ""));

el.html(el.html().replace(/strong/ig, ""));

> Существует множество вариантов запрета вызова контекстного меню мышью через Javascript, но jQuery позволяет реализовать это намного проще

чтоб вы сдохли, любезные гранато-раздаватели.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
валидатор парсит дтд. что там написано, то он и скушает. раньше просто небыло таргет-модуля и приходилось писать его самому…
НЛО прилетело и опубликовало эту надпись здесь
не, там речь о каком-то типографическом фиксе…
НЛО прилетело и опубликовало эту надпись здесь
судя по ченьжлогу это наблюдалось с сентября по ноябрь…
в любом случае пофиксить эту багу в локальной копии мог любой…
$('a[rel$='external']').click(function(){

работать ведь не будет :-)
Кавычки для external тогда уж надо двойные
:) fixed
— Трюк с выравниванием колонок некошерный. Верстка будет прыгать после загрузки.

— Определение броузерв в старых версиях Jquery было реализовано по userAgent. Было очень странно видеть такой глюк, в библиотеке, которая решила 99% броузерной совместимости js.

— За запрет вызова контекстного меню мышью нужно отрывать руки.
Иногда требуется свое контекстное меню, не показывать же их оба
Предзагрузка изображений

arguments_length = arguments.length;
for(var i = 0; i<arguments_length; i++)

по-моему так лучше
о да, прямо-таки ускорил в десять раз!
а не смущает, что один вызов jquery тут в 100 раз медленнее вызова Image?
В Opera контекстное меню всё равно будет появляться.
А почему «минус» комментарию? В Опере действительно стоит запрет на изменение обработки правой кнопки мыши.

З.Ы. Включается: Инструменты -> Настройки -> Дополнительно -> Содержание -> Параметри Javascript
Что-то как-то не очень советы. Скорее повторение доков jQuery =/
Советы странные. Особенно мне понравился совет по замене комментариев в CSS на Javascript вызовы. Интересно, хоть один верстальщик придёт в восторг от такого? А пользователи с отключённым Javascript'om будут долго хвалить авторов сайта?
Изменение размера шрифта не требует jQuery — это сейчас хорошо делают браузеры. Похоже, советам года три-четыре.
Относитесь к ним как к возможностям, а не как к руководству к действию. Это — информация для размышления, а не идеальные решения проблем.
и о чем тут размышлять? :))
$('a[rel$="external"]').click(function(){
 this.target = "_blank";
});
jQuery же может сразу для всего списка атрибуты изменить, и селектор атрибута неправильно подобран, нужно использовать ~= для списка значений, разделенных пробелом:

$('a[rel~="external"]').attr("target", "_blank");
Нет, я правильно написал, для списка значений, разделенных пробелом нужно использовать ~=, в документации по jQuery его почему-то нет, но он поддерживается (строка №2028 в jQuery 1.3.2):
type === "~=" ?
(" " + value + " ").indexOf(check) >= 0 :
В старых версиях тоже есть поддержка такого селектора атрибутов, а так же он является стандартным и описан в спецификации.
Это, по-моему, как вместо простых действий на чистом JS, подключить фреймворк и сделать так же…
Почему этот совет
jQuery.preloadImages = function()
{
for(var i = 0; i<arguments.length; i++)
{
jQuery("").attr(«src», arguments[i]);
}
};

не использует этот совет
$('element').size();
Потому что количество аргументов функции считается, а не сколько элементов найдено на странице.
ожидал увидеть что то более неизвестное
Ёпрст. Какого года статья? В 98% этих советов — при чём здесь jQuery? Чистого JS-кода для этих же действий будет столько же (а где-то меньше).

P.S.>:

> Кому не нравится jQuery?

шикарное начало для статьи :D (я знаю, что это перевод =), но тем не менее)
Я не использую ссылки с атрибутом target=blank, я использую атрибут target="_blank"
Спасибо! Искал код для подгрузки изображений, и вот нашёл. :)
на счет пункта «Колонки одинаковой высоты»
имхо лучше все таки вешать подобную функцию не на $(document).ready а на $(window).load то есть после полной загрузки страницы. Был у меня случай когда высота блоков считалась некорректно как раз из за того, что в них были картинки. Вешанье на $(window).load как раз помогло. Мот кому пригодиться =)
имхо лучше это решать средствами css.
Плохо что вот этот код
$(document).ready(function(){
  $(document).bind("contextmenu",function(e){
    return false;
  });
});

не работает в Opera 9
> Предзагрузка изображений
по-моему стоило упомянуть о возможности подцепить callback-функции:

var _src = «path/to/image.jpg»;

$("").load(function() {
alert(«image loaded»);
}).error(function() {
alert(«error loading image»);
}).attr(«src», _src);

> Колонки одинаковой высоты
Во-первых, это можно и нужно решать средствами css, а не javascript.
Во-вторых переменной tallest нечего делать в global scope. Автору примера стоит подучить значение ключевого слова var в javascript.

Вообще ни одной «хитрости» в статье не увидел.
> $("").load(function()
тег скушался.

пусть так будет:
$(new Image()).load(function()
Статья получилась полезной, не столько из-за советов, сколько из-за комментариев.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории