html - 在特定 ID 后切换所有 div 的可见性
问题描述
我正在尝试在 Squarespace 中为某个文本块创建打印功能。为了避免管理员输入代码,我希望能够使用内置的所见即所得的简单性。然而,这限制了我对某些元素的编码深度。
对于我的打印代码,我正在做的是在文本上方插入一个代码块并放置一个名为打印的跨度 ID:
<span id="print">Document to print</span>
squarespace 的工作方式是将其嵌套在包含的 DIV 中。这些是自动生成的,因此由某些类调用它,例如html-block
不会工作,因为有许多不同的 div 类型。
<div class="sqs-block code-block sqs-block-code" data-block-type="23" id="block-yui_3_17_2_1_1534372053149_74057">
<div class="sqs-block-content">
<span id="print">Document to print</span>
</div>
</div>
<div class="sqs-block html-block sqs-block-html" data-block-type="2" id="block-yui_3_17_2_1_1534372053149_78086">
<div class="sqs-block-content">
<p>Printed text line 1</p>
<p>Printed text line 2</p>
</div>
</div>
所以我试图做的只是将页面上的所有内容分类为隐藏,然后将所有内容分类id="print"
为可见:
@media print {
body * {
visibility: hidden;
}
div ~ #print, div ~ #print * {
visibility: visible;
}
div ~ #print {
position: absolute;
left: 0;
top: 0;
}
}
这导致一切都被隐藏了,除了:
<span id="print">Document to print</span>
有没有办法在之后显示所有元素#print
解决方案
简而言之,没有。
您的示例中的问题<span id="print">
是嵌套的,不幸的是, CSS 中没有父选择器。因此,在您的示例中,除了print 元素本身之外,不可能使用基于#print
. 就 CSS 选择器而言,您必须从父级到子级(或后续兄弟级)。
话虽如此,定位元素有多种不同的方法,您可能会发现 DOM 中有一种组合可以让您定位相关元素。例如,SquareSquare确实提供了唯一的 ID。会#block-yui_3_17_2_1_1534372053149_78086
改变它在 DOM 中的位置吗?如果没有,您可以按上述方式定位它。您还可以基于以下目标.html-block
,甚至类似div[data-block-type="2"]
:
div[data-block-type="2"] {
color: red;
}
<div class="sqs-block code-block sqs-block-code" data-block-type="23" id="block-yui_3_17_2_1_1534372053149_74057">
<div class="sqs-block-content">
<span id="print">Document to print</span>
</div>
</div>
<div class="sqs-block html-block sqs-block-html" data-block-type="2" id="block-yui_3_17_2_1_1534372053149_78086">
<div class="sqs-block-content">
<p>Printed text line 1</p>
<p>Printed text line 2</p>
</div>
</div>
别忘了你也可以使用::nth-of-type
and::nth-child
伪选择器和通用兄弟组合器 ( ~
)如果它们帮助基于前面的元素定位。
如果您可以访问 JavaScript,事情就会变得非常简单,因为您可以简单地使用.parentNode
and .nextElementSibling
:
const print = document.getElementById('print');
const parent = print.parentNode.parentNode;
const after_print = parent.nextElementSibling;
console.log(after_print.id);
<div class="sqs-block code-block sqs-block-code" data-block-type="23" id="block-yui_3_17_2_1_1534372053149_74057">
<div class="sqs-block-content">
<span id="print">Document to print</span>
</div>
</div>
<div class="sqs-block html-block sqs-block-html" data-block-type="2" id="block-yui_3_17_2_1_1534372053149_78086">
<div class="sqs-block-content">
<p>Printed text line 1</p>
<p>Printed text line 2</p>
</div>
</div>
推荐阅读
- machine-learning - 拆分数据集
- python - 将列更改为列标题熊猫
- android - 无法添加多个圆圈和地图标记
- r - CLARA 和 Gower 用于混合数据类型
- python - 使用 python pandas 多索引数据框按名称附加
- c# - MvvmCross 可见性绑定不起作用
- hyperledger-fabric - 如何在不使用 docker 的情况下在 Ubuntu 16 上安装 hyperledger Fabric?
- reactjs - 标记在反应原生地图中没有连续移动
- javascript - 在nodejs中使用格式键值解析数组
- ios - 在 swift 3 中关闭嵌入式 UITabbbar/storyboard