【问题标题】:.each js causing issues with other classes on page.each js 导致页面上其他类出现问题
【发布时间】:2017-04-22 07:36:24
【问题描述】:

HTML

<ul class="courseDates">
    <li class="dateOne col-sm-2">
        {tag_course date 1}
    </li>
    <li class="dateTwo col-sm-2">
        {tag_course date 2}
    </li>
    <li class="dateThree col-sm-2">
        {tag_course date 3}
    </li>
    <li class="dateFour col-sm-2">
        {tag_course date 4}
    </li>
    <li class="dateFive col-sm-2">
        {tag_course date 5}
    </li>
</ul>


Javascript

$('.dateOne').each(function() {    
    var data =jQuery(this).text();
    var arr = data.split('-');
    jQuery(this).html('<a class="button '+arr[1] + '" href="/training-rego?trainingDate={tag_course date 1}&trainingName={tag_name_nolink}&courseId={tag_itemid}"> <span class="day">'+arr[0] + '</span> <span class="month">'+arr[1] + '</span> <span  class="year">'+arr[2] + '</span> </a>');            
}); 

$('.dateTwo').each(function() {    
    var data =jQuery(this).text();
    var arr = data.split('-');
    jQuery(this).html('<a class="button '+arr[1] + '" href="/training-rego?trainingDate={tag_course date 2}&trainingName={tag_name_nolink}&courseId={tag_itemid}"> <span class="day">'+arr[0] + '</span> <span class="month">'+arr[1] + '</span> <span  class="year">'+arr[2] + '</span> </a>');            
}); 

$('.dateThree').each(function() {    
    var data =jQuery(this).text();
    var arr = data.split('-');
    jQuery(this).html('<a class="button '+arr[1] + '" href="/training-rego?trainingDate={tag_course date 3}&trainingName={tag_name_nolink}&courseId={tag_itemid}"> <span class="day">'+arr[0] + '</span> <span class="month">'+arr[1] + '</span> <span  class="year">'+arr[2] + '</span> </a>');            
});

$('.dateFour').each(function() {    
    var data =jQuery(this).text();
    var arr = data.split('-');
    jQuery(this).html('<a class="button '+arr[1] + '" href="/training-rego?trainingDate={tag_course date 4}&trainingName={tag_name_nolink}&courseId={tag_itemid}"> <span class="day">'+arr[0] + '</span> <span class="month">'+arr[1] + '</span> <span  class="year">'+arr[2] + '</span> </a>');            
}); 

$('.dateFive').each(function() {    
    var data =jQuery(this).text();
    var arr = data.split('-');
    jQuery(this).html('<a class="button '+arr[1] + '" href="/training-rego?trainingDate={tag_course date 5}&trainingName={tag_name_nolink}&courseId={tag_itemid}"> <span class="day">'+arr[0] + '</span> <span class="month">'+arr[1] + '</span> <span  class="year">'+arr[2] + '</span> </a>');            
}); 

我需要删除 .each 以便代码对每个项目进行操作,.each 会导致页面上其他项目出现未定义的错误。它需要是单独的,因此它为每组日期输出特定的标签,.each 函数使页面上的最后一项工作,但在第一项上出现未定义的错误。

Here 是一个工作版本,所以你可以检查一下。

有没有更好的方式来写JS?

非常感谢您提供有关此问题的任何帮助,谢谢。

【问题讨论】:

  • {tag_course date 1} 被替换了吗?您最好在问题中包含该问题,因为您将被 - 拆分,并且根本不会出现在本文中。
  • 是的,所以页面上可能有5门课程,每门课程都有一个输入课程日期1的字段,然后每门课程都有一个模板,当它在网站前端生成时它为每个人吐出日期。那有意义吗? @Jamiec
  • 附注,但尽量保持使用 jQuery 的方式一致,在不需要时使用 $()jQuery()
  • @GillesC 是的,我自己拿了 2 个代码并将它们混合在一起,我对 Javascript 不是很好,我知道我想要它做什么,它可能没有那么复杂,但我就是不知道如何正确执行它

标签: javascript jquery each


【解决方案1】:

试试这样的。

HTML

<ul class="courseDates">
    <li class="date col-sm-2">
        {tag_course date 1}
    </li>
    <li class="date col-sm-2">
        {tag_course date 2}
    </li>
    <li class="date col-sm-2">
        {tag_course date 3}
    </li>
    <li class="date col-sm-2">
        {tag_course date 4}
    </li>
    <li class="date col-sm-2">
        {tag_course date 5}
    </li>
</ul>

Javascript

$('.date').each(function(index) {    
    var data =jQuery(this).text();
    var arr = data.split('-');
    jQuery(this).html('<a class="button '+arr[1] + '" href="/training-rego?trainingDate={tag_course date ' + index + '}&trainingName={tag_name_nolink}&courseId={tag_itemid}"> '+arr[0] + ' '+arr[1] + ' '+arr[2] + ' </a>');           
});

【讨论】:

  • .each 导致此页面上的未定义问题 techserve01.businesscatalyst.com/training-categories/… 单击 LVR CPR 这些日期按钮正常工作,单击一个,它将带您进入 rego 表单页面并将所选课程日期传递给rego 页面。然后单击“HV 4 能力集群”下的日期按钮,您会看到 LVR CPR 日期仍然通过
  • 您是否也对其他元素使用相同的类名 date
【解决方案2】:

你只是把它复杂化了,只是让它们都有一个共享类(例如date)并只运行一次.each 代码。他们都做同样的行为是

  • 用连字符分隔li 中的日期
  • &lt;button&gt; 上使用日期部分作为类
  • 用链接包装日期。

查看下面的工作代码并查看源代码以查看转换。

$('.date').each(function() {  
    var $this = $(this);  
    var data =$this.text();
    var arr = data.split('-');
    $this.html('<a class="button '+arr[1] + '" href="/training-rego?trainingDate={tag_course date 5}&trainingName={tag_name_nolink}&courseId={tag_itemid}"> '+arr[0] + ' '+arr[1] + ' '+arr[2] + ' </a>');           
});     
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="courseDates">
  <li class="date col-sm-2">
    14-Dec-2016
  </li>
  <li class="date col-sm-2">
    15-Dec-2016
  </li>
  <li class="date col-sm-2">
    16-Dec-2016
  </li>
  <li class="date col-sm-2">
    24-Dec-2016
  </li>
  <li class="date col-sm-2">
    29-Dec-2016
  </li>
</ul>

【讨论】:

  • .each 导致此页面上的未定义问题 Working Version 单击 LVR CPR 这些日期按钮正常工作,单击一个,它将带您进入 rego 表单页面并将所选课程日期传递给rego 页面。然后单击“HV 4 能力集群”下的日期按钮,您会看到 LVR CPR 日期仍然通过
  • @Jake 与您的 javascript 无关,而与您构建 ul 的服务器端代码有关。
  • @Jake 哦,别等了,因为您将 JavaScript 包含了两次。每个选项卡一个。是的,不要那样做。
  • 不能用其他方式,否则每个日期按钮的日期都不会通过,我希望这个JS对每个标签独立操作
  • 现在看看,Working Version 我已经绕过 .each 通过给日期按钮提供独特的类,这已经解决了问题,点击每门课程中的日期按钮,正确的数据现在是传递到 Rego 表单页面我正在尝试做的事情是否有意义,虽然我知道它现在正在工作,但必须有一种方法来简化原始 JS 以不查找每个?
猜你喜欢
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-07
相关资源
最近更新 更多