2014-05-06 68 views
1

我需要以不同的格式打印文档。基本的东西,媒体打印与屏幕,但是这个特定的网页是动态插入一些内联样式。如何在发送前打印它们?打印内嵌样式

我正在添加一个jQuery元素,它在屏幕上不可见,但出现在print(#myElement)中。所以我试图搭载这个元素,但并没有真正成功。

if ($('#myElement').is(':visible')) { 
    $('.myContent').attr('style', ''); 
} 

我错过了什么?

谢谢。

+0

您可以使用'$('div [style]')。removeAttr('style');'或'$('div')。removeAttr('style');',其中前者更快。见[这里](http://stackoverflow.com/questions/1229688/how-can-i-erase-all-inline-styles-with-javascript-and-leave-only-the-styles-spec) – royhowie

+0

哪里是从页面获取动态内联样式?如果这是您自己的代码,那么也许您可以将其更改为动态添加的类,其中的(外部)CSS中的样式位于该类中。这也允许你再次使用'@ print'介质。 – GolezTrol

+0

不,这不是我的页面,我不能改变它。我开始认为我可能不会检查媒体是否正确。我认为这是正确的,因为我做了这个逻辑切换if/else。否则是真的,但即使IF错了也可能是真的......包含代码以执行打印的确定方法是什么? – santa

回答

0

下面是一个例子,你可以如何使用普通的香草JS:http://jsfiddle.net/AfdzW/。基本上你只需要定位你希望删除的内联样式的DOM元素,然后调用removeAttribute()方法。

function clearInlineStyles(sel) { 
    var els = document.querySelectorAll(sel); 
    [].forEach.call(els, function(e) { 
    e.removeAttribute('style'); 
    }); 
} 

clearInlineStyles('div'); 

作为替代方案,如果你只是想针对某些内嵌样式,你可以使用$.fn.css() jQuery的方法分别针对那些风格:

$.fn.removeSelectedStyles = function() { 
    var styles = arguments; 
    this.each(function() { 
    var $that = $(this); 
    [].forEach.call(styles, function(style) { 
     $that.css(style, ''); 
    }); 
    }); 
} 

$('div').removeSelectedStyles('background', 'height'); 

这里有一个fiddle展示了jQuery插件在工作中