javascript - 根据数组中的“数据标题”属性生成跨度内容
问题描述
我不知道我在做什么。
我正在使用(最新版本(5.x))swiper.js。我在一个页面上有多个滑动器,它们都共享完全相同的选项。当然,我可以初始化多个滑块,尽管我发现这是不必要的,因为一个初始化适用于所有滑块。同样对于咯咯笑,我现在尝试使用推荐的方法来实现它们,但无论如何它都没有用:
每个 swiper 幻灯片都有一个 data-title 属性,我想将其用作 swiper.js 选项中生成的 span 元素的数据。这些生成的 span 元素进入另一个 div(参见代码)。
然而,出于某种原因,在 renderbullet 选项中,创建的跨度文本会重用第一个 swiper 的属性并将标题数组应用于所有其他 swiper。我的理解是数组在第一个 swiper 中开始和停止,并将该存储的数组用作其余部分的数据。我不希望这样。
我尝试了多种方法来使 data-title 属性文本正确但没有成功。
我得到的最接近的是 map(); 这告诉我有 21 个数组是正确的。然而,当我尝试使用这些数据时,每个跨度都有 21 个标题。对此的一些帮助将不胜感激。
请看我下面的代码:
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide" data-title="The Title_A0">
<!--content-->
</div>
<div class="swiper-slide" data-title="The Title_A1">
<!--content-->
</div>
</div>
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<div class="swiper-pagination">
<!-- GENERATED SPAN GOES HERE -->
<span class="className">The Title_A0</span>
<span class="className">The Title_A1</span>
<!-- GENERATED SPAN GOES HERE -->
</div>
</div>
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide" data-title="The Title_B0">
<!--content-->
</div>
<div class="swiper-slide" data-title="The Title_B1">
<!--content-->
</div>
</div>
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<div class="swiper-pagination">
<!-- GENERATED SPAN GOES HERE -->
<span class="className">The Title_A0</span> <!-- I want <span class="className">The Title_B0</span>-->
<span class="className">The Title_A1</span> <!-- I want <span class="className">The Title_B1</span>-->
<!-- GENERATED SPAN GOES HERE -->
</div>
</div>
var swiper = new Swiper('.swiper-container', {
pagination: {
renderBullet: function (className, title) {
var title = document.querySelectorAll('.swiper-slide').getAttribute('data-title');
return '<span class="' + className + '">' + title + '</span>';
},
}
});
解决方案
显然在这一行:
var title = document.querySelectorAll('.swiper-slide').getAttribute('data-title');
您选择具有类 '.swiper-slide' 的所有元素,当您在多个元素上使用 getAttribute 时,它将返回第一次出现,这正是您描述的行为。
它声明第一个参数是当前迭代的索引。所以我使用 Jquery 来演示如何选择正确的标题
renderBullet: function (index, className) {
var title = $('.swiper-slide').eq(index).attr('data-title');
return '<span class="' + className + '">' + title + '</span>';
}
这仅在有一个滑块时有效!由于您有多个滑块,您需要添加一个单独的类或 id 才能使用选择正确的选择器,例如:
var title = $('#swiper1 .swiper-slide').eq(index).attr('data-title');
...
这是盲编码的伪代码,可以帮助您理解问题,一切都取决于您,祝您好运!
推荐阅读
- jquery - 使用 jQuery 将输入字段替换为文本字段
- html - 提取属性
- r - 逐个元素解析大字符串的最快方法
- abap - READ_TEXT 仅在更改时才查找长文本
- oracle - 我们如何确保所有活动都从脚本和 PL/SQL 程序写入作业日志文件
- java - DB2 根据给定输入重新编号表中的值
- postgresql - postgres:为什么 SELECT NULL <> '' 返回 FALSE?
- delphi - 为什么这个赋值会导致编译器错误?
- javascript - 为什么我的 *ngFor 对 ngrx 状态更改做出反应,但我的订阅方法只执行一次
- javascript - 如何在 JavaScript 中禁用当前月份日期和未来日期?