检查jQuery是否存在框架

时间:2009-08-25 19:16:34

标签: 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会被另一个框架集替换。

2 个答案:

答案 0 :(得分:3)

如果您想知道元素是否存在,您必须检查长度属性,请参阅jQuery FAQ

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

在你的情况下,我认为你想:

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

为什么检查长度属性?

因为如果你将一个选择器传递给不匹配任何东西的jQuery,返回的结果是一个jQuery对象,不是一个假值(null,undefined,0或false),在if statement条件下被评估为bool,非''falsy'值总是被评估为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 :(得分:1)

检查选择器:

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