影响JavaScript / CSS的HTML空间格式
HTML space format affecting JavaScript/CSS
发生了什么...如果您更改HTML中不同标签之间的间距或换行符,则会导致JavaScript或CSS出现问题(不确定是哪一个)。
代码本身是一个基本的可折叠列表,仅使用 HTML、JavaScript 和 CSS。我意识到你可以用jquery等来做到这一点。只是试图获得此代码的解释。如果您单击下面的jsfiddle链接,运行它,然后单击标题,它将在单击时展开并折叠。整理或更改间距并再次运行 - 单击时消失。
http://jsfiddle.net/7WPs6/46/
.HTML
<div class='collapsibleCont'><h3 id='collapsible1' class='collapsibleTitle' onclick="handleCollapsible('collapsible1')">+ title</h3><p style="display:none" class='collapsibleContent'>hello</p>
JavaScript
function handleCollapsible(id) {
var clickedTitle = document.getElementById(id);
var contentC = clickedTitle.parentNode.childNodes[1];
if (contentC.style.display == 'none') {
contentC.style.display = 'block';
var mysplittedtitle = clickedTitle.innerHTML.split(" ");
var newTitle = "- " + mysplittedtitle[1];
clickedTitle.innerHTML = newTitle;
} else {
contentC.style.display = 'none';
var mysplittedtitle = clickedTitle.innerHTML.split(" ");
var newTitle = "+ " + mysplittedtitle[1];
clickedTitle.innerHTML = newTitle;
}
}
任何帮助或想法将不胜感激。
-
原始代码转到下面的帖子中的"Th0rndike"。
如何使用PhoneGap获取适用于Android的可折叠列表视图
更改空格或添加新行时,您将更改childNode
clickedTitle.parentNode.childNodes[1];
你真正想要的是children[1]
所以你可以把代码改成这个
clickedTitle.parentNode.children[1];
有关childNode和child之间的更多区别,您可以看到此链接:
JavaScript 中的 child 和 childNode 有什么区别?
添加空格会更改 DOM 中的childNodes[1]
。这更可靠,不受空格的影响。
var contentC = clickedTitle.parentNode.getElementsByClassName("collapsibleContent")[0];
http://jsfiddle.net/7WPs6/50/
因为您正在基于空格对字符串进行标记化,然后使用第二个标记化字符串来更新此代码中的标题:
var mysplittedtitle = clickedTitle.innerHTML.split(" ");
var newTitle = "- " + mysplittedtitle[1];
添加空格会更改标题字符串的位置。 请注意,如果您在"title"之后添加一个空格并且它不会消失,因为您没有更改字符串数组"title"所在的元素。
修复它的一种方法是在"标题"周围添加一个跨度,如下所示:
<div class='collapsibleCont'>
<h3 id='collapsible1' class='collapsibleTitle' onclick="handleCollapsible('collapsible1')">
+ <span id="title">title</span>
</h3>
<p style="display:none" class='collapsibleContent'>hello</p>
</div>
然后将您的 JavaScript 更改为此
function handleCollapsible(id) {
var clickedTitle = document.getElementById(id);
var contentC = clickedTitle.parentNode.childNodes[1];
if (contentC.style.display == 'none') {
contentC.style.display = 'block';
var mysplittitle = document.getElementById("title").innerHTML();
var newTitle = "- " + mysplittitle;
clickedTitle.innerHTML = newTitle;
} else {
contentC.style.display = 'none';
var mysplittitle = document.getElementById("title").innerHTML();
var newTitle = "+ " + mysplittitle;
clickedTitle.innerHTML = newTitle;
}
}
http://jsfiddle.net/5fdo2yzt/
- html,js-如何限制元素"范围“-命名空间
- 静态html中图像之间的空间在javascript中消失
- 如何为HTML属性/选择器创建全局名称空间或变量
- 在html页面的属性周围添加了一个额外的空间
- 从html文件中的脚本标记调用非全局命名空间函数
- 影响JavaScript / CSS的HTML空间格式
- 使行占据 html 中的所有剩余空间
- 如何设置iframe以自动填充HTML中的空白正文空间
- 从 Javascript 字符串在 HTML 中呈现空间
- 如何修复 html 中的右列空间和底部容器空间
- JavaScript变量名称和HTML输入名称属性:名称空间冲突
- (jade)html标签;每个“;在i18next命名空间中
- HTML中的哪些空白空间被视为空白节点
- 用js隐藏HTML表行<tr>从而不占用空间
- CSS命名空间,HTML中的SVG:使用CSS突出显示SVG文件中的状态
- Html和CSS,给了我更大的工作空间,同时限制了文本的位置
- 使用html和js的移动应用程序的存储空间
- 如何调整HTML元素的高度以覆盖其所有可用空间'的父级
- 在html中占用一些额外空间的标签
- SVG空间中foreignObject HTML元素的坐标