【发布时间】:2023-03-17 05:39:01
【问题描述】:
当所有 div 名称都相同时,似乎只能尝试更新选定 div 中的图像。
<div class="collapse">img img img img img</div>
<div class="collapse">img img img img img img img</div>
<div class="collapse">img img img </div>
<div class="collapse">img img img img img img</div>
我在 data-src 标签中设置了图像的数据,当 div 展开时,它会加载图像。但是,由于 div 具有相同的类名,因此在加载展开 div 中的图像时,它会加载所有折叠 div 中的所有图像。
$(function() {
$('.collapse img').attr('src', function(index, src) {
return this.getAttribute('data-src');
});
});
这是我展开代码里面的代码,怎么改成只加载当前选中的div里面的图片?
编辑 - 展开代码:
$.fn.toggler = function(options) {
var o = $.extend({}, $.fn.toggler.defaults, options);
var $this = $(this);
$this.wrapInner('<a style="display:block; color: #fff; text-decoration: none;" href="#" title="Expand/Collapse" />');
if (o.initShow) {$(o.initShow).addClass('shown');}
$this.next(o.cllpsEl + ':not(.shown)').hide();
return this.each(function() {
var container;
(o.container) ? container = o.container : container = 'html';
if ($this.next('div.shown').length) { $this.closest(container).find('.shown').show().prev().find('a').addClass('open'); }
$(this).click(function() {
$(function() {
$('.collapse img').attr('src', function(index, src) {
return this.getAttribute('data-src');
});
});
$(this).find('a').toggleClass('open').end().next(o.cllpsEl)[o.method](o.speed);
return false;
});
});};
编辑 2 - div 如何扩展。对不起,这个网站还是很新的。应该提供更多信息。
这是页面顶部的javascript:
<script type="text/javascript">
$(function() {
$("span.expand").toggler({method: "toggle", speed: 0});
});
</script>
点击展开 div 的 span:
<span class="expand"> </span>
跨度在css中设置为显示图像作为背景。
编辑:找到解决方案。
我放置:
$(this).find('a').toggleClass('open').end().next(o.cllpsEl)[o.method](o.speed);
在显示图像代码上方,以便在尝试加载图像之前先将其打开,并将加载图像代码更改为:
$(function() {
$this.closest(container).find('.collapse:visible img').attr('src', function(index, src) {
return this.getAttribute('data-src');
});
});
谢谢大家:P
【问题讨论】:
-
你的 div 是如何扩展的?如何判断选择了哪个 div?
-
您的展开 div 代码在哪里?
-
Pom,这和 PHP 有什么关系?我冒昧地删除了标签,这对我来说似乎纯粹是客户端的 javascript。
-
已编辑解决方案