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 にあまり重複がないことも想定しています。

<data>複数の要素がある場合に備えて、生成された xml に2 つの要素を残します。

于 2012-11-15T10:55:50.107 に答える