#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.