0

我正在使用以下代码从四个下拉列表中生成一个简码,其中两个是多选。默认情况下,它用逗号分隔数组,没有空格。我需要将其更改为仅一个空格或逗号和空格。我试过使用 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;

我需要为代码顶部的前两个变量设置分隔符。

4

1 回答 1

1

正如jQuery .val()doco所说:

“在<select multiple="multiple">元素的情况下,该.val()方法返回一个包含每个选定选项的数组;如果未选择任何选项,则返回null.”

所以你的变量levelusername每个都是一个数组或空值。无论哪种方式,它们都不是字符串。如果您像当前使用 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 回答