jquery - как установить родительский атрибут?

Я пытаюсь написать оператор if, в котором, если для одного из элементов установлено значение «none», я хочу, чтобы родительский элемент также отображал «none»...

Это код, который я пытаюсь, который не работает...

/* tried this first */
if($('#prevx a').attr('display') == 'none') {
    $(this).parent().attr('display','none');
}

/* and then this */
if($('#prevxa > a').attr('display') == 'none') {
    $('#prevxa').attr('display','none');
}

Разметка выглядит так:

<ul>
   <li class="navnext" id="nextxa">
      <a id="nextx" href="#"><img src="/images/next.png"/></a>
   </li>

   <li class="navprev" id="prevxa">
      <a id="prevx" href="#" style="display: none;"><img src="/images/previous.png"/></a>
   </li>
</ul>

person n00b0101    schedule 16.12.2009    source источник


Ответы (4)


Попробуй это:

if($('#prevx').css('display') == 'none') {
    $('#prevx').parent().css('display','none');
}

Еще лучше:

$('#prevx').parent().css('display',$('#prevx').css('display'));

Этот пример работает для меня. Чтобы скрыть/отобразить родителя, переключите отображение дочернего элемента между нет и встроенный:

<ul>
   <li class="navnext" id="nextxa">
      <a id="nextx" href="#"><img src="/images/next.png"/></a>
   </li>

   <li class="navprev" id="prevxa">
      <a id="prevx" href="#" style="display: inline;"><img src="/images/previous.png"/></a>
   </li>
</ul>

<script>
if ($('#prevx').css('display') == 'none') 
    $('#prevx').parent().css('display', 'none');
else
    $('#prevx').parent().css('display', 'list-item');
</script>
person leepowers    schedule 16.12.2009
comment
Хм... Я вставил ваш код точно так, как вы его здесь, и это не сработало... Я также пробовал: if($('#prevx').css('display') == 'none') { $('#prevxa').css('display','none'); } и это тоже не сработало (?) - person n00b0101; 16.12.2009
comment
Обновил ответ новым фрагментом кода - возможно, стоит попробовать обернуть if ... else в блок $(document).ready(). - person leepowers; 16.12.2009

.attr используется для таких тегов, как id, title, alt, src и т. д.

.css используется для стилей CSS, таких как отображение, шрифт, оформление текста: мерцание и т. д.

Решение Pygorex1 должно помочь.

person Aaron    schedule 16.12.2009

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

Кроме того, есть много других способов сделать это (оберните строки ниже внутри $(document).ready(function(){...})), чтобы они работали:

Используя :hidden селектор (это только скроет):

if ($('#prevx').is(':hidden')) $('#prevxa').hide();

Используйте тернарный оператор (это скроет или покажет родителя)

var showOrHide = ($('#prevx').is(':hidden')) ? 'none' : '';
$('#prevxa').css('display', showOrHide);

JQuery использует несколько сокращений:

  • :hidden найдет объекты, которые скрыты (или настроены на отображение: нет). Он также не обязательно должен быть внутри .is(). Вы можете использовать это: $('div:hidden').show() чтобы показать все скрытые элементы div.
  • :visible найдет объекты, которые не скрыты (display = '', 'inline', 'block' и т. д.)
  • $(element).hide() скроет элемент (отображает значение none)
  • $(element).show() покажет элемент (очищает отображаемое значение)
person Mottie    schedule 16.12.2009

Попробуйте это

$('#child_id').parent().css('display','none');
person Love Kumar    schedule 20.07.2019