Как проверить наличие пустого attr () в jquery?

У меня есть несколько div, которые созданы с использованием PHP. Якорь внутри div всегда имеет HREF, даже если он пустой. По сути, я пытаюсь определить, является ли HREF пустым. Если у него есть содержимое, ничего не делайте, если оно пустое, удалите текст, удалите привязку, а затем вставьте текст обратно.

Вот div:

<div class="title"> 
    <a class="article" href="">Lorem Ipsum</a> 
</div> 

Вот мой код:

jQuery(document).ready(function($) { //required for $ to work in Wordpress

    $(".article").each(function(){
        if ($(this).attr('href') !== undefined) {
            return;
        } else {
            var linkTitle = $(this).html();
            $(this).parent().empty().html(linkTitle);
        }                               
    });    
//-->
});
 mcgrailm22 сент. 2010 г., 22:14
где статья в HTML моя ошибка, я вижу это

Ответы на вопрос(3)

Решение Вопроса

Вы можете проверить на пустоеhref атрибут и "развернуть" эти ссылки, используя.replaceWith() как это:

$(".article[href='']").replaceWith(function() { return this.innerHTML; });

Вы можете попробовать это здесь.

 mcgrailm22 сент. 2010 г., 22:16
проклятый ник 8 ^)
 Jared22 сент. 2010 г., 22:31
Я скопировал / вставил его в блокнот, чтобы попытаться избавиться от незаконных символов, похоже, теперь работает, спасибо! Но я не уверен, что понимаю, ПОЧЕМУ этот код работает? Имеет ли replaceWith () некоторую способность, которая автоматически проверяет атрибуты, и, если она не находит их, выполняет свою функцию?
 Nick Craver22 сент. 2010 г., 22:34
@Jared - The[href=''] это то, что проверяет на пустоеhref атрибут ... тогда.replaceWith() работает только нате якоря, есть смысл?
 Jared22 сент. 2010 г., 22:23
Это работает по вашей ссылке, но когда я помещаю это в мой код, я получаюUncaught SyntaxError: Unexpected token ILLEGAL
 Nick Craver22 сент. 2010 г., 22:26
@Jared - мне кажется, что вы скопировали какой-то странный символ ascii, похожий на пробел там ... попробуйте удалить пространство вокруг всего, что вы скопировали.
 mcgrailm22 сент. 2010 г., 22:21
Мне нравится, как это устраняет необходимость в условной ветке
 Nick Craver22 сент. 2010 г., 22:37
@ Джаред - добро пожаловать :)
 Jared22 сент. 2010 г., 22:36
аааа я понял сейчас :) Спасибо!

href':

$("#myLink[href='']").removeAttr('href');

Для множественного таргетинга, например, атрибут 'style':

$("#myDiv td, a, p, table, nav, header[style='']").removeAttr('style');

Таким образом, вы избавитесь от атрибута только тогда, когда он пуст, а не удаляете весь элемент целиком.

Полный пример кода:

$('#myDiv table, tr, td, a, p').each(function() { 
if ($(this).attr('style') == '') { 
    $(this).removeAttr('style'); 
} 
})

чтобы проверять егоundefined:

if ($(this).attr('href')) {
  // href is not blank
} else {
  // href is blank
}
 Frank Schwieterman07 окт. 2010 г., 01:29
обратите внимание, что IE8 также возвратит пустую строку, если href не существует. Выражение if все еще допустимо, но оно пытается href = "" и не href как эквивалент в IE.
 Jared22 сент. 2010 г., 22:18
Разве это не проверяет, есть ли функция href attr (), а не пустая?
 Nick Craver22 сент. 2010 г., 22:17
this.href намного проще;)
 meagar22 сент. 2010 г., 22:18
@ Ник, я иногда забываю, что есть эта архаичная вещь "JavaScript", сидящая ниже jQuery: p
 meagar22 сент. 2010 г., 22:22
@Jared Нет, он вернет значение атрибута илиundefined если его не существует В JavaScript"" (пустая строка) эквивалентно логическому значению false.attr() будет оцениватьfalse если атрибут не существует или является пустым.

Ваш ответ на вопрос