JQuery数据属性有时是数组,有时是字符串



我在试图隐藏包含复选框值中具有特殊字符的字符串的数组时遇到了一些问题。我有这3个DOM元素:

<div class="question-container form-group" data-id="235" data-parent-elements-visibility="[&quot;Choice 3 $^%&amp;&amp;_++_<>&quot;, &quot;Choix deux, avec des virgules et des &quot;quotes&quot;&quot;, &quot;Choix trois avec des a'postrop`hes et de deux &nbsp;[trucs] chelou<<.&quot;]" data-parent-id="304" id="question-container-235">

</div>
<div class="question-container form-group" data-id="307" data-parent-elements-visibility="[&quot;Choie 2 @#$%^&amp;*(&quot;, &quot;Choice 3 $^%&amp;&amp;_++_<>&quot;, &quot;Choix deux, avec des virgules et des &quot;quotes&quot;&quot;, &quot;Choix trois avec des a'postrop`hes et de deux &nbsp;[trucs] chelou<<.&quot;]" data-parent-id="304" id="question-container-307">

</div>
<div class="question-container form-group" data-id="303" data-parent-elements-visibility="[&quot;Choie 2 @#$%^&amp;*(&quot;, &quot;Choice 3 $^%&amp;&amp;_++_<>&quot;, &quot;Choix 1 mon pote ! Avec des accent est des ç cédille&quot;, &quot;Choix trois avec des a'postrop`hes et de deux &nbsp;[trucs] chelou<<.&quot;]" data-parent-id="304" id="question-container-303">
</div>

当我试图获得数据属性"数据父元素可见性"时,我得到的是:

$("#question-container-303").data('parent-elements-visibility')
"["Choie 2 @\#$%^&*(", "Choice 3 $^%&&_++_<>", "Choix 1 mon pote ! Avec des accent est des ç cédille", "Choix trois avec des a'postrop`hes et de deux  [trucs] chelou<<."]"
$("#question-container-307").data('parent-elements-visibility')
"["Choie 2 @\#$%^&*(", "Choice 3 $^%&&_++_<>", "Choix deux, avec des virgules et des \"quotes\"", "Choix trois avec des a'postrop`hes et de deux  [trucs] chelou<<."]"
$("#question-container-235").data('parent-elements-visibility')
(3) ["Choice 3 $^%&&_++_<>", "Choix deux, avec des virgules et des "quotes"", "Choix trois avec des a'postrop`hes et de deux  [trucs] chelou<<."]

所以question-container-235的行为是正确的,并给了我一个数组。你知道为什么其他2个返回字符串而不是数组吗?

非常感谢!

原因是307中的数据父元素可见性值的第16个字符是反斜杠。这是在中间打断内容,避免将其解析为数组。

以下将正常工作(双\或无(:

<div class="question-container form-group" data-id="307" data-parent-elements-visibility="[&quot;Choie 2 @\#$%^&amp;*(&quot;, &quot;Choice 3 $^%&amp;&amp;_++_<>&quot;, &quot;Choix deux, avec des virgules et des &quot;quotes&quot;&quot;, &quot;Choix trois avec des a'postrop`hes et de deux &nbsp;[trucs] chelou<<.&quot;]" data-parent-id="304" id="question-container-307">

我想处理它的最好方法是@zer00ne所说的:我重新修改了整个东西,以进行额外的API调用,并使用一个漂亮的json对象,而不是在数据属性中存储那么多东西(用户提供的(,即使反斜杠更改在这种特殊情况下可能有效,也很容易出现问题。

非常感谢!

最新更新