2

サポートされていない言語を拡張するために、クラウド コンピューティング プラットフォームで使用する「インライン トランスレータ」アプリケーションを作成しています。この大部分は、jQuery を使用してテキスト値を検索し、それを翻訳に置き換えてから、一意の ID を持つ span タグを要素に追加して、アプリケーション内の他の場所で使用します。ただし、翻訳対象の値がまったく同じ (一致する要素) など、複数の要素がある場合に問題が発生します。問題の関数では、親タグから 2 番目、3 番目、4 番目などを取り出して、一致したすべての要素を同じスパンに配置します。私のコードは、次の例によく似ています。

<script src='jquery-1.4.2.js'></script>
<script>
jQuery.noConflict();
var uniqueID='asdfjkl';
jQuery(window).ready(function() {
var myQ1 = jQuery("input[id~=test1]");
myClone=myQ1.clone();
myClone.val('Replaced this button');
myQ1.replaceWith('<span id='+uniqueID+'></span>');
jQuery('#'+uniqueID).append(myClone);
});
</script>
<table>
<tr><td>
<input id='test1' type='button' value="I'm a button!"></input> &nbsp;
<input id='test2' type='button' value="And so am I"></input>
</tr></td>
<tr><td>
<input id='test1' type='button' value="I'm a button!"></input>
</tr></td>
</table>

回避策として、ループを使用して各スパンのクラスを作成し、jQuery("input[id~=test1]").length まで増分して実験しましたが、何も得られないようです。仕事に。一致した各要素に一意の ID を与える方法はありますか? 私の jQuery の流暢さが試されています。

事前に助けてくれてありがとう。

アーロン

4

3 に答える 3

4

私の考えは、乱数を生成し、それを初期IDに追加することでした:

jQuery.noConflict();
jQuery(window).ready(function() {

   var myQ1 = jQuery("input[id*='test']");
   var uniqueNum = Math.floor( Math.random()*99999 );
   var uniqueID = myQ1.attr('id')+'-'+String(uniqueNum);

   myClone=myQ1.clone();
   myClone.text('Replaced this button');

   myQ1.replaceWith('<span id='uniqueID+'></span>');

   jQuery('#'+uniqueID).append(myClone);

});
于 2010-05-23T16:06:46.803 に答える
2

それは良いことです、みんなに感謝します!最終的には次のようになります。

var myQ1 = jQuery("input[name~=test1]");
myQ1.each(function() {
    var id = Math.floor( Math.random()*99999 );
    jQuery(this).wrap("<span id=\"span-"+id+"\"></span>");
...

Aseptik、これには私がドラッグしたよりもはるかに多くのコードがあるので、私がハングアップした部分を簡潔に保ちたいと思いました. ご入力いただきありがとうございます。

よろしく、 アーロン

于 2010-05-23T16:21:00.267 に答える
0

あなたが探しているのはラップだと思います。以下は、id に含まれる各要素をtestスパンでラップします。

jQuery.noConflict();
jQuery(document).ready(function() {
    jQuery("input[id*=test]").wrap('<span></span>');
});

親セレクターを使用して既存の ID を使用してスパンを一致させることができるため、実際に複製したり生成したりする必要はありません。

$("input[id*=test]').parent('span')...

ID を持つ新しい要素を本当に作成したい場合は、それぞれに独自の命名スキームを使用できます。

jQuery.noConflict();
jQuery(document).ready(function() {
    jQuery("input[id*=test]").each(function() {
        var $this = $(this);
        var id = $this.attr('id');
        $this.wrap('<span id="span-' + id + '"></span>");
    });
});
于 2010-05-23T15:09:59.490 に答える