2

私はこのプロセスを実行しようとしています:

  1. 「i18n_」で始まるすべてのクラスを検索します
  2. そのクラス名をキャプチャし、そのクラスの.html値をクラスと同じ名前の変数に設定します。

基本的に、i18n_で始まるすべての文字列を含むリストがサーバーから取得されます。たとえば、i18​​n_t23="Back"などです。<span class="i18n_t23"></span>を取得して、その値を変数i18n_t23に設定したいと思います。

現在、手作業でコーディングされた$( "span.i18n_t189")。html(i18n_t189);の膨大なリストがあります。そして、それらがすべてそこにあるかどうかをチェックしなければならないのは疲れています。これを自動的に実行させる方法が必要です。

ありがとう!

4

4 に答える 4

5

使用するだけです:

$('span[class^=i18n_]').text(
    function(){
        return this.className;
    });

これにより、要素のテキストが要素のクラス名に設定されることに注意してください。aには属性spanがなくvalue、その設定html()は不要です(ただし、この場合はほぼ同じ結果になります)。

ちなみに、これが必要なものに応じて、単純なCSSでこれをエミュレートできます(「最新の」ブラウザーをサポートする場合)。

span[class=^=i18n_]::before {
    content: attr(class);
}

複数のクラスを処理する手段:

$('span[class]').filter(
    function(i, e) {
        var el = $(e),
            classes = el.attr('class').split(/\s+/);
        for (var i = 0, len = classes.length; i < len; i++) {
            var assessed = classes[i].indexOf('i18n_');
            if (assessed === 0) {
                el.data('classMatch',classes[i]);
                return true;
            }
        }
    }).text(function(){ return $(this).data('classMatch'); });​

JSフィドルデモ

そして、ルックアップを処理するためのアプローチ(返されたクラス名を使用して、オブジェクトから割り当てられた値を取得します。

var lookup = {
    'i18n_something' : 'Something for the "something" suffixed class.',
    'i18n_somethingElse' : 'Something for the "somethingElse" version.',
    'i18n_AndSomethingElse' : 'And...well, you know the drill.'
};

$('span[class]').filter(
    function(i, e) {
        var el = $(e),
            classes = el.attr('class').split(/\s+/);
        for (var i = 0, len = classes.length; i < len; i++) {
            var assessed = classes[i].indexOf('i18n_');
            if (assessed === 0) {
                el.data('classMatch',classes[i]);
                return true;
            }
        }
    }).text(function(){ return lookup[$(this).data('classMatch')]; });​

JSフィドルデモ

于 2012-10-02T20:27:11.157 に答える
1

あなたはそれを試してみてください。 $("*[class*='i18n_']).attr("class")または要素が1つのクラス名のみの場合$("*[class^='i18n_']).attr("class")

于 2012-10-02T20:31:58.970 に答える
1

これが1つの方法です:

    var _regClassMatch = /i18n_t([0-9]+)/;
    jQuery.each(jQuery('span'), function () {
        var _oCurrSpan = jQuery(this);
        var _sCurrClass = _oCurrSpan.attr('class');

        var _mClassMatch = _sCurrClass.match(_regClassMatch);
        if (_mClassMatch) {
            alert(_mClassMatch[1]);
        }
    });

_mClassMatch [1]は数値であり、_oCurrSpanオブジェクトは現在のスパンです。document.readyで実行するだけです。

于 2012-10-02T20:47:25.847 に答える
0

セットアップを少し変更して、取得したjavascriptコードを簡略化することをお勧めします。

<div data-i18="a">a</div>

<div data-i18="b">b</div>

var i18 = { a: 'a2', b: 'b2' }

$('div[data-i18]').each(function(ind, el) {
    var key = $(el).data('i18')
    $(el).html(i18[key])        
});​

// or in case of global variables 

$('div[data-i18]').each(function(ind, el) {
    var key = $(el).data('i18')
    $(el).html(window[key])        
});​

したがって、クラスの代わりに、i18_somethingカスタムデータ属性data-i18を設定し、ここに値を入力します。

于 2012-10-02T20:38:04.013 に答える