很抱歉,如果我遗失了某些东西(我是JS的初学者)。我希望使用PrintThis.js JQuery插件为任何具有“printdiv”类的div添加打印按钮。我正在使用Jquery对按钮和div类进行编号,并将所需的JQuery代码附加到页面底部的脚本标记中。
这是我用我正在使用的代码制作的codepen。 https://codepen.io/hinte019/pen/yEybmG?editors=1010
这也是代码形式
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="printthis/printThis.js"></script>
</head>
<body>
<div class="printdiv"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Rem voluptatibus, magni, alias eaque dolor quisquam placeat, similique atque ratione fugiat impedit nam numquam accusantium. Deserunt reiciendis nulla omnis necessitatibus, quo.</p></div>
<div class="printdiv"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sit labore commodi, magnam corrupti dignissimos hic soluta. Distinctio quod saepe, tempora inventore ipsum, eligendi, dignissimos, eos recusandae perspiciatis odit consequuntur! Optio.</p></div>
<div class="printdiv"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptate distinctio fugiat earum, quibusdam soluta ipsa voluptas porro nostrum cupiditate vel modi nesciunt sint rem, vitae id exercitationem debitis, saepe eius?</p></div>
<script>
$(function () {
// print divs
var i = 1;
$("body script").append('$(document).ready(function () {');
$('.printdiv').each(function(){
$(this).removeClass('printdiv').addClass('printdiv'+i);
$('.printdiv'+i).prepend('<button type=\"button'+i + '\" class=\"btn btn-primary printbutton' +i + '\">Print<\/button>');
var printcode = '\r\n $(\'.printbutton'+i + '\').click(function () {\r\n $(\'.printdiv'+i + '\').printThis();\r\n });';
$("body script").append(printcode);
i++;
});
$("body script").append('\r\n});');
});
</script>
</body>
</html>
这导致打印
$(document).ready(function () {
$('.printbutton1').click(function () {
$('.printdiv1').printThis();
});
$('.printbutton2').click(function () {
$('.printdiv2').printThis();
});
$('.printbutton3').click(function () {
$('.printdiv3').printThis();
});
});
结果代码应该是正确的,但打印按钮不起作用:(
答案 0 :(得分:0)
问题在于,您附加代码的正文中的script
已经被js引擎解析/处理,因此您无法更改其内容。
您应该创建一个内存中的script
,然后在填充之后将其附加到DOM。
$(function() {
// print divs
var i = 1;
var script = $('<script>');
script.append("$(document).ready(function () {");
$(".printdiv").each(function() {
$(this)
.removeClass("printdiv")
.addClass("printdiv" + i);
$(".printdiv" + i).prepend(
'<button type="button' +
i +
'" class="btn btn-primary printbutton' +
i +
'">Print</button>'
);
var printcode =
"\r\n $('.printbutton" +
i +
"').on('click', function () {\r\n $('.printdiv" +
i +
"').printThis();\r\n });";
script.append(printcode);
i++;
});
script.append("\r\n});");
script.appendTo('body');
});
答案 1 :(得分:0)
实现目标的更简单方法:
更改为html(包括源代码中的打印按钮):
<div class="printdiv">
<p>Lorem ipsum dolor sit amet</p>
<button class="btn btn-primary printbutton">Print</button>
</div>
<div class="printdiv">
<p>consectetur adipisicing elit</p>
<button class="btn btn-primary printbutton">Print</button>
</div>
<div class="printdiv">
<p>vitae id exercitationem debitis</p>
<button class="btn btn-primary printbutton">Print</button>
</div>
jQuery的:
$('.printButton').on('click', function(){
var $parent = $(this).parent('.printdiv');
$parent.printThis();
});
此jQuery在点击button
时说,找到与button
匹配的div
的父printDiv
,并将其作为{{1}的选择器传递}。
此外,我建议将所有javascript / jQuery移出页面并将其移入自己的文件中。
所以你会:
printThis
重要提示:
<script src="path/to/jQuery"></script>
<script src="path/to/printThis"></script>
<script src="path/to/your/custom/javascript"></script>
通常不是必需的,并且是影响DOM的非常迂回的方式。<script>
代替$.on('click',...
。对于$.click
,为匹配选择器的每个元素创建一个单独的处理程序,仅适用于DOM中已有的元素(因此在初始代码中存在问题)。 $.click
适用于动态添加的元素