Сравнение attr('href')
с location.pathname
не так надежно. attr()
читает свойства JavaScript, а не атрибуты HTML; свойство JavaScript для href
обычно является разрешенным абсолютным URI. jQuery пытается обойти некоторые проблемы с этим отличием, но я не знаю, что это всегда успешно.
Что было бы более надежным, так это помните, что объект HTMLAnchorElement также работает как объект Location, поэтому вы можете напрямую сравнивать их пути:
if (this.hostname===location.hostname && this.pathname===location.pathname)
Теперь это проверяет, что это внутренняя ссылка с тем же путем, что и текущая страница. Он игнорирует любые конечные ?query
или #hash
части.
$(this).attr("class", "active");
addClass
, который вы упоминаете в названии, безусловно, лучший способ сказать это.
Это определенно должно работать в IE6. То, что не будет работать в IE6, что может сбить вас с толку, это то, что хотя у вас может быть элемент с несколькими классами, у вас не может быть селектора CSS с несколькими требованиями к классу на одном элементе eg.:
a.mylink.active { ... }
это некорректно потребует только класс active
в IE6. Многие другие селекторы также не поддерживаются в IE6, например, дочерний селектор >
:
div.thing > a.action { ... }
никогда не совпадет в IE6.