撇号

时间:2017-04-22 10:35:26

标签: javascript jquery html json

我有一个Javascript,它从两个HTML下拉列表中读取文本,删除所有特殊字符,然后将文本存储在变量中。下拉列表中的文本来自JSON文件。问题是,只要下拉列表中的文本有撇号,Javascript就会在撇号处剪切字符串,因此撇号后的所有文本都不包含在Javascript变量中。

我已经包含了一个替换规则来尝试用非空格替换所有撇号,但没有运气。我无法通过使用HEX代码来避免这个问题,因为Javascript直接从HTML下拉列表中读取文本。

示例:如果用户在下拉列表中选择“Belgium”和“Braine-l'Allerud”,则javascript应创建变量“Cities-belgium-brainelallerud.html”。相反,它会删除“Braine-l'Allerud”中的撇号之后的所有文本,而是创建一个变量“Cities-belgium-brainel.html”

以下是JSON文件(下拉列表中文本的基础):

"austria": "Hirschegg,Salzburg,Bergheim,Wien",
"belgium": "Antwerpen,Braine-l'Alleud,Brugge"

这是Javascript代码:

jQuery( "button[type='submit']" ).click(function(e) {
    e.preventDefault()
    var var1 = $('#json-one').val()
    var var2 = $('#json-two').val().toLowerCase().replace(/'/g,"").replace(/[^a-zA-Z0-9_-]/g,'')

    var link = "Cities-"+var1+"-"+var2+".html"
    console.log(link)
    document.location = link;
    });

通过以下脚本将JSON值提取到下拉列表中:

$(document).ready(function(){
    $("#json-one").change(function() {
        var $dropdown = $(this);
           $.getJSON("../jsondata/data003.json", function(data) {

                var key = $dropdown.val();
                var vals = [];

                switch(key) {
                    case 'austria':
                        vals = data.austria.split(",");
                        break;
                    case 'belgium':
                        vals = data.belgium.split(",");
                        break;
            }
                var $jsontwo = $("#json-two");
                $jsontwo.empty();
                $.each(vals, function(index, value) {
                   $jsontwo.append("<option value='"+value+"'>" + value + "</option>");
                });

            });
        });
        $("#json-one").trigger('change');
    });

下拉列表是动态的;第二个下拉列表(城市)取决于用户在第一个下拉列表(国家/地区)中选择的内容。

最后,下拉列表在HTML中编写如下:

<span class="fontyellow">Country:</span>
    <select id="json-one">
                <option value="austria">Austria</option>
                <option value="belgium">Belgium</option>
    </select>

<span class="fontyellow">City:</span>
    <select id="json-two">
    </select>

提前致谢。

2 个答案:

答案 0 :(得分:1)

好的,问题在于动态构建选项。你已经用这种方式组织了你的撇号:

 $jsontwo.append("<option value='"+value+"'>" + value + "</option>");

因此,单引号围绕“&#39;值”中的城市名称。这个字符串的一部分,因此字符串在它遇到的第一个单个撇号处被截断。基本上它构造时看起来像这样:

<option value='Braine-l'Alleud'>Braine-l'Alleud</option>

您需要为字符串的该部分使用双引号:

 $jsontwo.append('<option value="'+value+'">' + value + "</option>");

这将解决问题,并为您提供以下内容:

 <option value="Braine-l'Alleud">Braine-l'Alleud</option>

答案 1 :(得分:0)

我不确定你为什么以你的方式生成链接但是如果你将jQuery中的代码替换为javascript,它应该能够读取文本。

如下所示:

var var1 = document.getElementById("json-one").innerText;
var var2 = document.getElementById("json-two").innerText;

我将html放在div中,如下所示:

<div id="json-one">Hirschegg,Salzburg,Bergheim,Wien</div>
<div id="json-two">Antwerpen,Braine-l'Alleud,Brugge</div>

OR

将.val()替换为.html(),如下所示:

var var1 = $('#json-one').html();
var var2 = $('#json-two').html();

看看它是否有帮助!