给某个class动态添加printthis按钮
Dynamically add printthis button to a certain class
抱歉,如果我遗漏了什么(我是 JS 的初学者)。我希望使用 PrintThis.js JQuery 插件将打印按钮添加到任何带有 "printdiv" class 的 div。我正在使用 Jquery 对按钮和 div classes 进行编号,并将所需的 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 引擎 parsed/processed 处理,因此您无法更改其内容。
您应该在内存中创建一个 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');
});
更简单的方法来完成你想要的:
更改为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
匹配 class printDiv
和将其作为 printThis
.
的选择器传递
此外,我建议将所有 javascript/jQuery 移出页面并放入它自己的文件中。
所以你会:
<script src="path/to/jQuery"></script>
<script src="path/to/printThis"></script>
<script src="path/to/your/custom/javascript"></script>
重要提示:
- 动态附加
<script>
通常是不必要的,并且是影响 DOM. 的一种非常迂回笨拙的方式
- 使用
$.on('click',...
而不是 $.click
。对于 $.click
,将为每个与选择器匹配的元素创建一个单独的处理程序,并且仅适用于 DOM 中已有的元素(因此您的初始代码中存在问题)。 $.on
适用于动态添加的元素
抱歉,如果我遗漏了什么(我是 JS 的初学者)。我希望使用 PrintThis.js JQuery 插件将打印按钮添加到任何带有 "printdiv" class 的 div。我正在使用 Jquery 对按钮和 div classes 进行编号,并将所需的 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 引擎 parsed/processed 处理,因此您无法更改其内容。
您应该在内存中创建一个 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');
});
更简单的方法来完成你想要的:
更改为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
匹配 class printDiv
和将其作为 printThis
.
此外,我建议将所有 javascript/jQuery 移出页面并放入它自己的文件中。
所以你会:
<script src="path/to/jQuery"></script>
<script src="path/to/printThis"></script>
<script src="path/to/your/custom/javascript"></script>
重要提示:
- 动态附加
<script>
通常是不必要的,并且是影响 DOM. 的一种非常迂回笨拙的方式
- 使用
$.on('click',...
而不是$.click
。对于$.click
,将为每个与选择器匹配的元素创建一个单独的处理程序,并且仅适用于 DOM 中已有的元素(因此您的初始代码中存在问题)。$.on
适用于动态添加的元素