javascript - 将 printthis 按钮动态添加到某个类
问题描述
对不起,如果我遗漏了什么(我是 JS 的初学者)。我正在寻找使用PrintThis.js JQuery 插件将打印按钮添加到任何具有“printdiv”类的 div。我正在使用 Jquery 对按钮和 div 类进行编号,并将所需的 JQuery 代码附加到页面底部的脚本标记中。
这是我用我正在使用的代码制作的代码笔。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();
});
});
结果代码应该是正确的,但是打印按钮不起作用:(
解决方案
问题在于,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');
});
推荐阅读
- google-api - DialogFlow 与 Twilio 折旧集成
- javascript - 模态与内容重叠并使内容在引导程序中不可点击?
- django - Django - 检查两个密码哈希是否具有相同的原始密码
- c# - 获取返回的 JSON 字符串 C# 的值
- python - Python 数据框到 SQL Server 的写入问题
- c++ - Qt 从 MSVC 迁移到 MinGW - COM 对象问题
- java - 从列表中获取所有重复的对象
- jquery - jQuery 验证插件不适用于 WordPress 中的表单
- mysql - 如何隐藏主键,因为我在 URL 中需要它们
- python - PySide2/Qt for python:当我单击按钮时,GUI 冻结