Javascript 使用iframe动态创建选项卡
我在用户单击菜单时动态创建选项卡。引用的html文件在iframe中打开,iframe也是动态创建的 一切正常,但当选项卡计数超过“3”且用户单击上一个选项卡时,下一个iframe将显示在上一个iframe内容的下方 下面是我使用的代码。有人能建议我该怎么做吗Javascript 使用iframe动态创建选项卡,javascript,jquery,html,tabs,Javascript,Jquery,Html,Tabs,我在用户单击菜单时动态创建选项卡。引用的html文件在iframe中打开,iframe也是动态创建的 一切正常,但当选项卡计数超过“3”且用户单击上一个选项卡时,下一个iframe将显示在上一个iframe内容的下方 下面是我使用的代码。有人能建议我该怎么做吗 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head> <script text/javascri
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<script text/javascript>
$(document).ready(function() {
var c=0;
$("#documents a").click(function() {
c++;
addTab($(this),c);
return false;
});
$('#tab1 a.tab').live('click', function() {
// Get the tab name
i = 0;
var chk;
var contentname = $(this).attr("id") + "_content";
var ifid=$("#content .dcontent:last iframe").attr("id");
// hide all other tabs
if(ifid>1)
{
for(i=ifid;i>0;i--)
{
fr = document.getElementById (i);
if (fr.style.display!='none')
{
fr.style.display="none";
}
}
}
//make the current frame visible
var lnm=$(this).attr("name");
fr = document.getElementById (lnm);
if (fr.style.display=='none')
fr.style.display="block";
$("#tab1 li").removeClass("current");
// show current tab
$(this).parent().addClass("current");
});
});
/* Creation of Tab*/
function addTab(link,ct) {
// If tab already exist in the list, return
if ($("#" + $(link).attr("rel")).length != 0)
return;
// hide other tabs
$("#tab1 li").removeClass("current");
if(ct>1)
{
for(i=ct-1;i>0;i--){
fr = document.getElementById (i);
if (fr.style.display!='none')
fr.style.display="none";
}
}
// add new tab and related content
$("#tab1").append("<li class='current'><a class='tab' id='" + $(link).attr("rel") + "' name='"+ct+"' href='" + $(link).attr("href") + "' target='" + $(link).attr("target") + "'>" + $(link).html() + "</a><a name ='"+ct+"' href='#' class='remove' >x</a></li>");
var e = $('<div class="dcontent" ><li style="list-style:none;"><iframe id="'+ct+'" src='+$(link).attr("href")+' name="content" align="middle" width=600px; height=400px;> </iframe></li></div>');
$('#content').append(e);
}
</head>
<body>
<ul id="tabs">
<!-- Tabs go here -->
<div style="float: left;">
<ul id="menu">
<li> <a href="#">Next</a>
<ul id="documents">
<li><a href="tab1.html" target="content" rel="1" >Document4</a></li>
<li><a href="tab2.html" rel="2" target="content" >Document5</a></li>
<li><a href="tab3.html" rel="3" target="content" >Document6</a></li>
<li><a href="tab4.html" rel="4" target="content" >Document6</a></li>
</ul>
</li>
</ul>
</div>
</ul>
<ul id="tab1">
<div style="float: left;">
</ul>
<div id="content">
</div>
$(文档).ready(函数(){
var c=0;
$(“#文档a”)。单击(函数(){
C++;
addTab($(本),c);
返回false;
});
$('#tab1 a.tab').live('click',function(){
//获取选项卡名称
i=0;
var-chk;
var contentname=$(this.attr(“id”)+“\u content”;
var ifid=$(“#content.dcontent:last iframe”).attr(“id”);
//隐藏所有其他选项卡
如果(ifid>1)
{
对于(i=ifid;i>0;i--)
{
fr=document.getElementById(i);
如果(fr.style.display!=“无”)
{
fr.style.display=“无”;
}
}
}
//使当前帧可见
var lnm=$(this.attr(“name”);
fr=document.getElementById(lnm);
如果(fr.style.display=='none')
fr.style.display=“块”;
$(“tab1 li”).removeClass(“当前”);
//显示当前选项卡
$(this.parent().addClass(“当前”);
});
});
/*创建选项卡*/
功能添加选项卡(链接,ct){
//如果列表中已存在选项卡,则返回
if($(“#”+$(link.attr(“rel”)).length!=0)
返回;
//隐藏其他选项卡
$(“tab1 li”).removeClass(“当前”);
如果(ct>1)
{
对于(i=ct-1;i>0;i--){
fr=document.getElementById(i);
如果(fr.style.display!=“无”)
fr.style.display=“无”;
}
}
//添加新选项卡和相关内容
$(“#tab1”)。追加();
var e=$('”);
$('内容')。附加(e);
}
-
一个主要问题是如何标识元素。您有一个变量c,它是数值型的,从0开始,每次单击链接时都会增加,然后被设置为一个iframe的ID。但是,您也在为创建的选项卡设置数字标识。最终,这些元素ID将重叠,并且会出现如下错误
至少,让您的iFrame具有
- “帧”+$(链接).attr(“rel”)
- 而不是您现在使用的ct数值变量(复制c)
if(ct>1) {
for(i=ct-1;i>0;i--){
alert(i);
fr = document.getElementById (i);
if (fr.style.display!='none')
fr.style.display="none";
}
}
使用:
这样,您就可以轻松地将rel属性链接到帧的ID,而不是c变量中的任意数值
你应该使用你的rel属性,因为你已经给了你的链接。您可以使用data buttonid和.data()来访问它,但这取决于您自己
然后,当你识别所有东西时,用这个数字把所有东西配对在一起。i、 e
- 帧ID:“帧”+$(链接).attr(“rel”)
- 选项卡ID/名称:“选项卡”+$(链接).attr(“rel”)
- 名称:“tab_锚定”+$(link.attr(“rel”)
使用我提供的代码进行测试后,它会按照您的要求执行。
DIV>LI
是无效的htmlLI
必须是列表元素的子元素可能我误读了,但看起来您只需要使用当前选项卡更新内容。如果是这样而不是$('#content.append(e);您可以使用$('#content').html(e);
$("#content").children("div.dcontent").each(function() {
var theFrame = $(this).find("li iframe");
if ($(theFrame).attr("id") != ("frame_" + $(link).attr("rel"))) {
$(theFrame).css("display", "none");
}
});