【问题标题】:jQuery: Using Multiple Arrays to Match Class Attribute Which Determines ChildNodes HTML?jQuery:使用多个数组来匹配确定 ChildNodes HTML 的类属性?
【发布时间】:2013-10-13 17:40:36
【问题描述】:

我有一个每周计划,我使用静态表手动更新。

<table>
  <tr class="live al tv">
    <td>October 2</td>
    <td>12:30 pm</td>
    <td class="competition"></td>
    <td>Team A v Team B</td>
    <td class="field">1</td>
  </tr>
  <tr class="be tv">
    <td>October 2</td>
    <td>6 pm</td>
    <td class="competition"></td>
    <td>Team C v Team D</td>
    <td class="field">2</td>
  </tr>
  <tr class="ga tv">
    <td>October 3</td>
    <td>12:30 pm</td>
    <td class="competition"></td>
    <td>Team D v Team A</td>
    <td class="field">3</td>
  </tr>
  <tr class="live de tv">
    <td>October 3</td>
    <td>6 pm</td>
    <td class="competition"></td>
    <td>Team C v Team B</td>
    <td class="field">4</td>
  </tr>
</table>

我有 2 个数组。第一个是类列表:

var compClass = new Array();
compClass[0] = 'al',
compClass[1] = 'be',
compClass[2] = 'ga',
compClass[3] = 'de';

第二个是比赛名单:

var competitions = new Array();
competitions[0] = 'alpha',
competitions[1] = 'beta',
competitions[2] = 'gamma',
competitions[3] = 'delta';

我要做的是将compClass 数组分别匹配到competitions 数组。我希望这样,如果&lt;tr&gt; 类与compClass 值之一匹配,则其子元素&lt;td class="competition"&gt;&lt;/td&gt; 的内部文本将使用相应的competitions 值自动填充。如果这没有任何意义,这是我正在尝试使用的 jQuery:

jQuery(function($){
  $(document).ready(function() {

    var rowClass = $('table tr[class*=" "]'),
        compCell = $('td.competition'),
        fieldCell = $('td.field');

    function setCompetition() {
      for(var i=0;i<compClass.length;++i) {
        $('tr').attr('class',compClass[i]).each(function() {
          this.children[2].innerHTML = competition[i];
        });
      }
    }

  });
});

我尝试使用$.map(),但无法正常工作。我是 jQuery 的新手——更不用说 JS 了。我究竟做错了什么?任何人都可以提供一些指导吗?任何帮助将不胜感激。

【问题讨论】:

  • $.map() 是要走的路。也许你应该分享这段代码?
  • @ColinE 这是它的 jsFiddle:jsfiddle.net/hH5m3

标签: javascript jquery html arrays


【解决方案1】:

我建议使用一个对象:

var compClass = {
    'al' : 'alpha',
    'be' : 'beta',
    'ga' : 'gamma',
    'de' : 'delta'
}
var k = Object.keys(compClass);

$('tr[class]').each(function() {
    var prop = $.grep(this.className.split(' '), function(value) {
                    return k.indexOf(value) > -1;
               })[0];

    if (prop) this.children[2].innerHTML = compClass[prop];
});

http://jsfiddle.net/3wGmR/1/

【讨论】:

    【解决方案2】:

    这应该可以解决问题:

    $.map($("tr"), function(tr, i) {
    
            $.each(compClass, function(index, someClass){
                if ($(tr).hasClass(someClass)) {
                    classIndex = compClass.indexOf(someClass);
                    compVal = competitions[classIndex];
                    $(tr).find(".competition").each(function() {this.innerHTML = compVal});
                };
            });
        });
    });
    

    http://jsfiddle.net/U7qWB/1/

    【讨论】:

      猜你喜欢
      • 2010-09-14
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      • 2013-03-24
      • 2013-03-14
      相关资源
      最近更新 更多