Проверка, существует ли фрейм с помощью jQuery

#javascript #jquery

#javascript #jquery

Вопрос:

Я обнаружил, что могу сделать следующее:

 if($('#notice', parent.frames['header'].document).length>0) { alert("It is here!"); }
  

для проверки наличия элемента в другом фрейме.
Есть ли способ узнать, существует ли фрейм? В частности, я хочу посмотреть, есть ли parent.frames[‘header’].document.

Есть ли надежный способ сделать это?

Обновление: Вот мой код набора фреймов:

 <frameset rows="104,*,22" frameborder="NO" border="0" framespacing="0">
    <frame src="header.php" id="header" name="header" scrolling="no" title="Header and Menu" noresize>
    <frame src="main.php" title="Main content" name="main">
    <frame src="footer.php" name="footer" title="Footer" scrolling="NO" noresize>
</frameset>
  

Я пытаюсь убедиться, что могу получить доступ к div, который находится внутри «заголовка».
Недостатком является то, что в некоторых случаях main заменяется другим набором фреймов.

Ответ №1:

Если вы хотите узнать, существует ли элемент, вам нужно проверить свойство length, см. Часто задаваемые вопросы по jQuery:

 if ($('#myFrame').length) {
  alert('#myFrame exists');
}
  

В вашем случае, я думаю, вы хотите :

 if ($('frame[name=header]', parent).length) {
  alert('frame exists');
}
  

Зачем проверять свойство length?

Поскольку, если вы передаете в jQuery селектор, который ничему не соответствует, возвращаемый результат является объектом jQuery, не является ложным значением (null, undefined, 0 или false), в операторе if условие вычисляется как bool, а не «ложное» значение всегда вычисляется как true:

 if ($('#nonExisting')) {
  alert('always true');
}

// because 
!!$('#nonExisting') == true;  // and
!!'hello' == true;
!!0 == false;
  

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

Редактировать: Посмотрев на разметку вашего набора фреймов и предположив, что вы хотите проверить, существует ли фрейм заголовка с главной страницы, вы можете легко сделать это с помощью :

  if (parent.header !== undefined) {
   // frame exists
 }
  

Или просто:

  if (parent.header) {
   // frame exists
 }
  

Проверьте этот пример:

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

1. Я попробовал ваш второй пример if ($(‘фрейм[имя= заголовок]’, родительский). длина) { и, похоже, у меня это не сработало. Есть предложения?

Ответ №2:

Проверьте селектор:

 if ($("#myFrame").length) alert("It exists!");
  

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

1. Он делает это для элемента внутри фрейма, а не для самого фрейма. С какой стати вы бы проголосовали против меня из-за этого? Это совершенно не связано.

2. Они проголосовали за, потому что мой пример работает. Проверка длины селектора, когда селектор ищет фрейм, является допустимой опцией.

3. @Josh, я проверял длину $ («#MyFrame») на ноль. Это для самого фрейма. Операция проверяет длину элемента внутри $(«#MyFrame»), что совершенно другое. Я отредактировал, чтобы предоставить более простой пример, который вполне приемлем.

4. $("#myFrame").length; против. $("#notice", $("#myFrame")).length;

5. С таким соотношением голосов вверх : вниз, как у Джоша, он лучше подходит для троллинга блога или форума, а не для того, чтобы быть снобом SO.