在javascript中从onbeforeprint中排除特定元素
excluding particular elements from onbeforeprint in javascript
我更熟悉CSS编码,而不是Javascript,所以当我被要求找到一种在打印过程中而不是在屏幕上显示链接URLS的方法时,我遇到了一些麻烦。使用CSS,我可以很好地管理我想要的东西,但由于Internet Explorer的古怪,我不得不找到一个javascript解决方案来解决我的问题。
我用这段代码解决了我的困境,使链接URL在打印时显示,然后在打印预览关闭时从页面上消失。
window.onbeforeprint = function(){
var links = document.getElementsByTagName("a");
for (var i=0; i< links.length; i++){
var theContent = links[i].getAttribute("href");
if (!theContent == ""){
links[i].newContent = " [" + theContent + "] ";
links[i].innerHTML = links[i].innerHTML + links[i].newContent;
}
}
}
window.onafterprint = function(){
var links = document.getElementsByTagName("a");
for (var i=0; i< links.length; i++){
var theContent = links[i].innerHTML;
if (!theContent == ""){
var theBracket = theContent.indexOf(links[i].newContent);
var newContent = theContent.substring(0, theBracket);
links[i].innerHTML = newContent;
}
}
}
然而,现在我的问题变成了打印所有的页面链接URL。但是,很明显,我不需要打印内部导航URL之类的东西;这只会让成品看起来一团糟。有没有办法将页面的某些部分(如ID为Navigation的UL列表)从javascript中的onbeforerint/onafterprint函数中排除?
getElementsByTagName
可以用作任何DOM节点的方法。因此:
var links = document.getElementById('showURLs').getElementsByTagName('a');
在父对象上使用ID
只需将代码中links
的变量定义替换为以上内容即可。像这样:
window.onbeforeprint = function(){
var links = document.getElementById('showURLs').getElementsByTagName('a');
for (var i=0; i< links.length; i++){
var theContent = links[i].getAttribute("href");
if (!theContent == ""){
links[i].newContent = " [" + theContent + "] ";
links[i].innerHTML = links[i].innerHTML + links[i].newContent;
}
}
}
window.onafterprint = function(){
var links = document.getElementById('showURLs').getElementsByTagName('a');
for (var i=0; i< links.length; i++){
var theContent = links[i].innerHTML;
if (!theContent == ""){
var theBracket = theContent.indexOf(links[i].newContent);
var newContent = theContent.substring(0, theBracket);
links[i].innerHTML = newContent;
}
}
}
排除特定元素的子元素
window.onbeforeprint = function(){
var links = document.getElementsByTagName("a");
var exclude = document.getElementById("navBar").getElementsByTagName("a");
for (var i=0; i< links.length; i++) {
if (!in_array(links[i], exclude)) {
var theContent = links[i].getAttribute("href");
if (!theContent == "") {
links[i].newContent = " [" + theContent + "] ";
links[i].innerHTML = links[i].innerHTML + links[i].newContent;
}
}
}
}
我们得到页面上所有链接的数组和排除元素中的一个链接(此处ID为"navBar")。然后,当我们循环浏览页面上的链接时,我们首先检查它们是否在排除数组中,只有当它们不在时,我们才会采取行动!
对于该条件,我们使用bool in_array(needle, haystack)
函数,如果在haystack(数组)中找到针,则返回true,否则返回false。这个函数实际上是对PHP本机函数的改编——请参阅PHP手册。
function in_array(needle, haystack) {
for (i=0;i<haystack.length;i++) {
if (haystack[i] == needle) {
return true;
}
}
return false;
}
看看我创建的这个JSfiddle来测试它。如果你在浏览器中运行打印预览,你就能看到右边的链接!
希望这有帮助:)
相关文章:
- 使用 jQuery 创建可单击的行并排除子元素
- getElementsByTagName排除元素(筛选器)
- 如何将元素添加到动态数组并排除现有元素
- jQuery按数据值排除元素
- 排除基于先前ElementSibling的元素
- 获取元素的内部文本,但排除隐藏的子元素
- 我可以在 ReactJS 中排除原始元素的子元素吗?
- 如何在绑定事件期间排除元素
- 如何在文档单击时排除元素
- 从 hide() 操作中排除父元素及其子元素
- TinyMCE - 排除元素
- 从预加载中排除元素
- 如何在身体鼠标移动时排除某些元素
- 从某个元素中排除按键
- 如何在jquery.click()事件中排除元素类作为目标
- 从dom获取整个html,但排除一些元素
- 无序播放12<李>来自<ul>从列表中排除3个元素
- 如何从ng单击操作中排除元素
- 在javascript中从onbeforeprint中排除特定元素
- 不能排除用于排序的元素