0

次のコードを使用して、4 つのドロップダウンからショートコードを生成しています。そのうちの 2 つは複数選択です。デフォルトでは、配列はコンマで区切られ、スペースはありません。スペースのみ、またはカンマとスペースのいずれかに変更する必要があります。map() を使用してみましたが、完全に機能しなくなったため、明らかに間違っていました。デフォルトの動作を伴う作業スクリプトは次のとおりです。

    function generate_shortcode()
    {
        var level = jQuery('#shortcode_levels').val();
        var username = jQuery('#shortcode_usernames').val();
        var hide = jQuery('#shortcode_hidden').val();
        var logged = jQuery('#shortcode_logged_status').val();
        var shortcode_start = '[myshortcode';
        var shortcode_hide = ' hide="'+hide+'"';
        var shortcode_logged = ' logged="'+logged+'"';          
        var shortcode_level = ' level="'+level+'"';
        var shortcode_username = ' username="'+username+'"';
        var shortcode_end = '] Content Here [/myshortcode]';
        if (hide == '')
            var shortcode_hide = '';                
        if (logged == '')
            var shortcode_logged = '';
        if (level == null)
            var shortcode_level = '';
        if (username == null)
            var shortcode_username = '';
        var shortcode = shortcode_start+shortcode_level+shortcode_username+shortcode_logged+shortcode_hide+shortcode_end;

コードの先頭にある最初の 2 つの変数の区切り記号を設定する必要があります。

4

1 に答える 1

1

jQuery .val()docoが言うように:

<select multiple="multiple">要素の場合、.val()メソッドは選択された各オプションを含む配列を返します。オプションが選択されていない場合は、を返しますnull。」

したがって、変数levelusernameはそれぞれ配列またはnullのいずれかになります。いずれにせよ、それらは文字列ではありません。現在 JavaScript で行っているように配列を文字列と連結すると、ご覧のよう' level="'+level+'"'に配列がコンマ区切りの文字列に変換されます。これは標準の JavaScript の動作であり、jQuery とは関係ないことに注意してください。

修正方法は?それらが配列の場合は、配列.join()メソッドを使用して、好きな区切り文字でそれらを文字列に変換できます。

    var level = jQuery('#shortcode_levels').val();
    var username = jQuery('#shortcode_usernames').val();
    var hide = jQuery('#shortcode_hidden').val();
    var logged = jQuery('#shortcode_logged_status').val();

    var shortcode_start = '[myshortcode';
    var shortcode_hide = hide === '' ? '' : ' hide="'+hide+'"';
    var shortcode_logged = logged === '' ? '' : ' logged="'+logged+'"';          
    var shortcode_level = level === null ? '' : ' level="'+level.join(", ")+'"';
    var shortcode_username = username === null ? '' : ' username="'+username.join(", ")+'"';
    var shortcode_end = '] Content Here [/myshortcode]';

    var shortcode = shortcode_start+shortcode_level+shortcode_username+shortcode_logged+shortcode_hide+shortcode_end;

if上記のように、各ステートメントを三項 (または条件付き) 演算子に置き換えました。

var shortcode_level = level === null ? '' : ' level="'+level.join(", ")+'"';

...つまり、他の方法でlevel === null使用する場合は.''' level="'+level.join(", ")+'"'

以前level.join(", ")はコンマとスペースを区切り文字として適用していましたが、そこに何でも入れることができるので、スペースのみを使用してください try level.join(" ")

于 2013-10-05T16:50:03.913 に答える