Возможный дубликат:
Проверить наличие атрибута с помощью JQuery
Как вы проверяете, есть ли атрибут для элемента в jQuery? Подобно hasClass
, но с attr
?
Например,
if ($(this).hasAttr("name")) {
// ...
}
Возможный дубликат:
Проверить наличие атрибута с помощью JQuery
Как вы проверяете, есть ли атрибут для элемента в jQuery? Подобно hasClass
, но с attr
?
Например,
if ($(this).hasAttr("name")) {
// ...
}
var attr = $(this).attr('name');
// For some browsers, `attr` is undefined; for others,
// `attr` is false. Check for both.
if (typeof attr !== typeof undefined && attr !== false) {
// ...
}
Как насчет только $(this).is("[name]")
?
Синтаксис [attr]
- это селектор CSS для элемента с атрибутом attr
, а .is()
проверяет, соответствует ли вызываемый ему элемент указанному CSS-селектору.
Если вы будете часто проверять наличие атрибутов, я бы предложил создать функцию hasAttr
, чтобы использовать, как вы выдвинули гипотезу в своем вопросе:
$.fn.hasAttr = function(name) {
return this.attr(name) !== undefined;
};
$(document).ready(function() {
if($('.edit').hasAttr('id')) {
alert('true');
} else {
alert('false');
}
});
<div class="edit" id="div_1">Test field</div>
Ты так близко сошел с ума.
if($(this).attr("name"))
Нет hasAttr, но при нажатии атрибута по имени будет возвращен undefined, если он не существует.
Вот почему работает ниже. Если вы удаляете атрибут name из #head, загорается второе предупреждение.
Обновление: В соответствии с комментариями ниже будет выполняться ТОЛЬКО, если атрибут присутствует И установлено что-то, а не если атрибут есть, но пустое
<script type="text/javascript">
$(document).ready(function()
{
if ($("#heading").attr("name"))
alert('Look, this is showing because it\ not undefined');
else
alert('This would be called if it were undefined or is there but empty');
});
</script>
<h1 id="heading" name="bob">Welcome!</h1>
Поздно к вечеринке, но... почему не просто this.hasAttribute("name")
?
Обратитесь Это
Лучший способ сделать это будет с filter()
:
$("nav>ul>li>a").filter("[data-page-id]");
Было бы неплохо иметь .hasAttr(), но так как этого не существует, существует такой способ.
Object.prototype.hasAttr = function(attr) {
if(this.attr) {
var _attr = this.attr(attr);
} else {
var _attr = this.getAttribute(attr);
}
return (typeof _attr !== "undefined" && _attr !== false && _attr !== null);
};
Я прикрепил это, написав свою собственную функцию, чтобы сделать то же самое... Я бы поделился тем, что здесь кто-то споткнулся. Я добавил null, потому что getAttribute() вернет значение null, если атрибут не существует.
Этот метод позволит вам проверять объекты jQuery и обычные объекты javascript.
Вы также можете использовать его с атрибутами, такими как disabled = "disabled" в полях формы и т.д., например:
$("#change_password").click(function() {
var target = $(this).attr("rel");
if($("#" + target).attr("disabled")) {
$("#" + target).attr("disabled", false);
} else {
$("#" + target).attr("disabled", true);
}
});
Атрибут rel используется для хранения идентификатора целевого поля ввода.
Я написал плагин hasAttr() для jquery, который будет делать все это очень просто, точно так, как запросил OP. Дополнительная информация здесь
EDIT: Мой плагин был удален в огромной ошибке с удалением базы данных plugins.jquery.com 2010 года. Вы можете посмотреть здесь для получения дополнительной информации о добавлении его самостоятельно и почему он не был добавлен.