0

我是一名涉足 jQuery 的设计师,这对我来说是一个非常陡峭的学习曲线,我知道它非常强大,但我努力避免数百万行代码,而且似乎仍然是硬编码,我很确定可以减少和软化。我想知道是否有人可以就以下代码示例提出建议?我是否应该将它组合成一个循环,如果可以的话,有人能指出我正确的方向吗?是否需要硬编码并添加每个选择器?

$(xml).find('Data').each(function(){

  $('#saved').val($(this).find('saved').text());
  $('.jobrole').text($(this).find('jobrole').text());
  $('#psu1').val($(this).find('psu1').text());    
  $('#psu2').val($(this).find('psu2').text());
  $('#psu3').val($(this).find('psu3').text());
  $('#tsu1').val($(this).find('tsu1').text());
  $('#tsu2').val($(this).find('tsu2').text());
  $('#tsu3').val($(this).find('tsu3').text());
  $('#pm1').val($(this).find('pm1').text());
  $('#pm3').val($(this).find('pm3').text());
  $('#tm1').val($(this).find('tm1').text());
  $('#tm3').val($(this).find('tm3').text());
});

任何建议将不胜感激。我已经开始研究 MVC 框架,这会有所帮助/这是前进的方向吗?

最亲切的问候雷切尔

4

3 回答 3

1

这是基本思想:

var xmlelement = $(this);
$('[id^="psu"],[id^="tsu"],[id^="pm"],[id^="tm"]').each(function(){
   $(this).val(xmlelement.find($(this).attr('id')).text());
});

还要注意 jQuery 需要小写标签,所以你需要使用这个:

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​$(xml).find('data').each(function(){

完整的代码可能是(取决于您的输入和您的 xml)

$(xml).find('data').each(function(){
    var xmlelement = $(this);
    $('.jobrole').text($(this).find('jobrole').text());
    $('input').each(function(){
       var text = xmlelement.find($(this).attr('id')).text();
       if (text.trim()) $(this).val(text);
    });
});

示范

请注意,在这段代码中,我必须防止 Data 元素没有某些元素。如果没有这个测试(if (text.trim())),只有最后一个数据会影响你的输入)。

于 2012-11-15T10:16:51.683 回答
0

基本减少重复行:

$(xml).find('Data').each(function(){
  var ids = ['saved', 'psu1', 'psu2', 'psu3', 'tsu1', 'tsu2', 'tsu3',
             'pm1', 'pm3', 'tm1', 'tm3'];

  $('.jobrole').text($(this).find('jobrole').text());

  for(var idx = 0; idx < ids.length; ++idx) {
      $('#'+ids[idx]).val($(this).find(ids[idx]).text());
  }
});

然后也许在ids其他地方构建数组并将其传递,因为我猜这些来自其他一些代码。

于 2012-11-15T10:38:09.497 回答
0

我可能会按照以下方式做一些事情:

$(xml).find('data').children().each(function(){
    var $self = $(this);
    var nodeName = this.nodeName.toLowerCase();
    var identifier = nodeName == 'jobrole' ? '.' : '#';

    $(identifier + nodeName ).val($self.text());
});

这是小提琴(改编自@dystroy 的原版):http: //jsfiddle.net/lnrb0b/xeNdQ/ 你可以看到我假设了小写的类/ id 值。我还假设您在 xml 中不会有太多重复。

在生成的 xml 中留下两个<data>元素,以防万一你有多个。

于 2012-11-15T10:55:50.107 回答