为什么javascript会关闭页面标记?
我有一个简单的js,它根据一个变量输出html为什么javascript会关闭页面标记?,javascript,html,css,Javascript,Html,Css,我有一个简单的js,它根据一个变量输出html if (icAnalytics == "1"){//Analytics $("#anal22").html("<a class='test1 test2 test33' href=/dashboard/site_sum.asp?id=application>Analytics</a>"); }; if (icPermissions >= "1"){//Publishers
if (icAnalytics == "1"){//Analytics
$("#anal22").html("<a class='test1 test2 test33' href=/dashboard/site_sum.asp?id=application>Analytics</a>");
};
if (icPermissions >= "1"){//Publishers
$("#pub22").html("<a tabindex='0' href=/admin/default.asp class='ubermenu-target ubermenu-target-with-icon ubermenu-item-layout-default ubermenu-item-layout-icon_left'><i class='ubermenu-icon fa fa-lock'></i><span class='ubermenu-target-title ubermenu-target-text'>Pub</span></a>");
}
if (icPermissions == "2"){//Admins
$("#admin22").html("<a class=aTop2 href=/system/default.asp>Admin</a>");
}
else {
};
if(icAnalytics==“1”){//Analytics
$(“#anal22”).html(“”);
};
如果(icPermissions>=“1”){//publisher
$(“#pub22”).html(“”);
}
如果(icPermissions==“2”){//Admins
$(“#admin22”).html(“”);
}
否则{
};
问题是,当我将html添加到一个“li”时,它会自动关闭“li”,即使我没有将该代码添加到其中。我无法真正更改页面的布局,因为我没有访问权限。在从javascript插入html后,有没有办法防止li关闭
注意-这有点复杂。pub22 li是第一个,然后anal22和admin22嵌套并具有不同的烫发。因为它们是嵌套的,所以我想让李打开。也许我把这件事弄得太难了。只要你用JavaScript向DOM中添加任何HTML,web浏览器就会尝试解析该HTML。如果您创建一个
元素而不关闭它,浏览器会像“哇,那不是有效的HTML;我会修复它”,它会自动关闭标记
但所有的希望都没有失去!不要在编写DOM时将代码添加到DOM中,而是将其全部存储在一个字符串中,并且只在使用完字符串后将其添加到DOM中
下面是一个例子:
var myHtml = "<li>"
myHtml += "blah blah this is some content";
myHtml += "</li>";
$("#someElement").html(myHtml); //we add the html to the DOM only now that we're done writing it
var myHtml=“”
myHtml+=“诸如此类,这是一些内容”;
myHtml+=“ ”;
$(“#someElement”).html(myHtml)//我们只是在完成编写之后才将html添加到DOM中
jQuery的.html
使用JavasScript的.innerHTML
.innerHTML
将节点插入DOM。根据定义,节点必须是有效的标记。因此,浏览器正在动态地纠正您的错误标记。您需要做的是:
$element = $('<li id="pub22">...</li>');
$element.append('<a id="anal22" href="...">...</a>');
$element.append('<a id="admin22" href="...">...</a>');
$element.appendTo('#someContainerElement');
$element=$('… );
$element.append(“”);
$element.append(“”);
$element.appendTo('someContainerElement');
在这里,您可以创建
,向其中附加一些
元素,然后最后将
附加到DOM中的某个现有元素。以这种方式创建元素并在准备激活时将其附加到DOM是jQuery的关键功能之一(事实上,这是基本jQuery函数的一部分)。在DOM中插入部分形成的元素的用例是什么?为什么在将节点应用于DOM之前不完全创建节点?您可能还应该养成在javascript字符串中编写HTML时保持一致的习惯。我建议使用(或多或少)行业标准的方法,在元素属性周围使用双引号,在javascript中对实际字符串使用单引号。@MikeBrant-这是针对一个供应商网站,我将其放入html中,动态地反映某人是否是管理员,基于js变量。除了关闭li标记外,一切都正常。@blankip仍然无法回答为什么要在DOM中插入类似
(iteself认为它不是有效的元素)的内容。为什么不同时添加
?@MikeBrant-我添加了一个注释。我需要添加的另一个html嵌套在该li中。我添加了一个关于嵌套的注释。如果我能把整个脚本加进去,我会的。但是,其他两个变量嵌套在这个函数中。因此,当它关闭时,它会关闭下拉菜单。@blankip这是您的逻辑问题,而不是.html
。这是工作完全按照设计。正如oxguy3所指出的,您需要做的是在将嵌套注入DOM之前完成所有嵌套。但如果我能使用逻辑,我会让php解析我的管理员。事实上,我并没有改变供应商菜单代码的结构。我已经创建了很多js,将html添加到供应商站点,我想这是我第一次出现嵌套问题。