我正在ExpressionEngine中构建一个页面,每次用户添加新图像时,img元素的ID都会增加1(为每个图像赋予一个唯一的id)。因此,例如,如果管理员上传3个图像ID,则每个都是mainImg0,mainImg1,mainImg2。用户可以根据需要添加任意数量的图片。
我使用以下javascript / jquery允许前端用户使用输入按钮打印图像,但是现在代码只打印第一张图像。什么是js中获取每个唯一ID的最佳方式,这样当用户点击打印时,相应的图像会在新标签页中打开并打印出来?
这是我目前的js:
$(document).ready(function(){
$('#printImg').click(function(){
pwin = window.open(document.getElementById("mainImg0").src,"_blank");
pwin.onload = function () {window.print();}
});
});
这里输出的html:
<div class="machine_parts_left">
<div class="machine_parts_left_img">
<a class="fancybox-effects-c" href="{image}" title="{image_title}"><img id="mainImg0" src="{image}" alt="{image_title} Diagram" /></a>
<p>Click To Zoom Image</p>
<input type="button" value="Print Image" id="printImg" />
</div>
</div>
<div class="machine_parts_left">
<div class="machine_parts_left_img">
<a class="fancybox-effects-c" href="{image}" title="{image_title}"><img id="mainImg1" src="{image}" alt="{image_title} Diagram" /></a>
<p>Click To Zoom Image</p>
<input type="button" value="Print Image" id="printImg" />
</div>
</div>
<div class="machine_parts_left">
<div class="machine_parts_left_img">
<a class="fancybox-effects-c" href="{image}" title="{image_title}"><img id="mainImg2" src="{image}" alt="{image_title} Diagram" /></a>
<p>Click To Zoom Image</p>
<input type="button" value="Print Image" id="printImg" />
</div>
</div>
答案 0 :(得分:1)
你可以简单地遍历DOM:
$('.printImg').click(function(){
// from the clicked element, find the closest ancestor <div>,
// search that element for <img> elements, use get() to return the DOM
// node (not the jQuery collection):
var img = $(this).closest('div').find('img').get(0),
pwin = window.open(img.src,"_blank");
pwin.onload = function () {window.print();}
});
请注意使用.printImg
代替#printImg
;因为,正如您在问题中所认识到的那样,id
在文档中必须是唯一的 。
使用类选择器(.printImg
)显然需要修改HTML:
<div class="machine_parts_left">
<div class="machine_parts_left_img">
<a class="fancybox-effects-c" href="{image}" title="{image_title}"><img id="mainImg0" src="{image}" alt="{image_title} Diagram" /></a>
<p>Click To Zoom Image</p>
<input type="button" value="Print Image" class="printImg" />
</div>
</div>
<!-- other repeated elements removed for brevity -->
参考文献:
答案 1 :(得分:0)
你不需要jQuery,也打印错误的窗口。
var buttons = document.querySelectorAll('.machine_parts_left_img input');
for (var i = buttons.length-1; i >= 0; i--) {
buttons[i].addEventListener('click', handleClick, false);
}
function handleClick (evnt) {
var img = evnt.srcElement.parentNode.querySelector('img');
var pwin = window.open(img.src,"_blank");
pwin.onload = function () {pwin.print()};
}
这会将操作添加到所有按钮,您无需为图像添加ID。