Jquery 和 Twig - 操作 jquery 内的 twig 数组集
Jquery and Twig - Manipulate twig array set inside jquery
我正在尝试 "sort" 使用 bootstrap 插件分层 select 的选项,该插件需要识别每个项目的 "order"。
鉴于此,我执行了一个数据库搜索,只获取 select 中列出的每个项目的顺序,将它们放在 twig 中设置的数组中,并尝试设置每个值每个选项的数组。
注意:我正在尝试使用这个插件https://neofusion.github.io/hierarchy-select/index.html#
{% set ordem = [] %}
{% for item in cPublicaItemEstruturas %}
{% if item not in ordem %}
{% set ordem = ordem|merge([item.ordem]) %}
{% endif %}
{% endfor %}
{% for i in ordem %}
{{ i }}<!--Results in 1 1 1 1 2 3 2 3 1 2 3 1 2 1 2 3 4 1-->
<script>
$('#c_publica_item_estrutura_itemPai option').attr('data-level', '{{ i }}');
</script>
{% endfor %}
我期待这样的事情:
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 1));
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 2));
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 3));
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 2));
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 3));
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 1));
但他们都只得出第一个数组索引,即 1。
您的做法无效,因为在 {% for i in ordem %}
的每次迭代中,您都将当前索引值设置为所有 select
选项。你得到 data-level="1"
for all 不是因为它在第一次迭代时停止,而是因为 ordem
的最后一个索引的值是 1.
您只需要稍微更改一下代码:
{% set ordem = [] %}
{% for item in cPublicaItemEstruturas %}
{% if item not in ordem %}
{% set ordem = ordem|merge([item.ordem]) %}
{% endif %}
{% endfor %}
//changes start here
<script>
var ordem = {{ ordem|json_encode }};
var i = 0;
$('#c_publica_item_estrutura_itemPai > option').each(function() {
$(this).attr('data-level', test[i]);
i++;
});
</script>
看到我在这里做什么了吗?
1- 我将 ordem
传递给 javascript 数组;
2-我遍历 select
选项;
3- 对于每个选项,我将 data-level
设置为数组当前索引的值。
我正在尝试 "sort" 使用 bootstrap 插件分层 select 的选项,该插件需要识别每个项目的 "order"。
鉴于此,我执行了一个数据库搜索,只获取 select 中列出的每个项目的顺序,将它们放在 twig 中设置的数组中,并尝试设置每个值每个选项的数组。
注意:我正在尝试使用这个插件https://neofusion.github.io/hierarchy-select/index.html#
{% set ordem = [] %}
{% for item in cPublicaItemEstruturas %}
{% if item not in ordem %}
{% set ordem = ordem|merge([item.ordem]) %}
{% endif %}
{% endfor %}
{% for i in ordem %}
{{ i }}<!--Results in 1 1 1 1 2 3 2 3 1 2 3 1 2 1 2 3 4 1-->
<script>
$('#c_publica_item_estrutura_itemPai option').attr('data-level', '{{ i }}');
</script>
{% endfor %}
我期待这样的事情:
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 1));
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 2));
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 3));
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 2));
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 3));
console.log($('#c_publica_item_estrutura_itemPai option').attr('data-level', 1));
但他们都只得出第一个数组索引,即 1。
您的做法无效,因为在 {% for i in ordem %}
的每次迭代中,您都将当前索引值设置为所有 select
选项。你得到 data-level="1"
for all 不是因为它在第一次迭代时停止,而是因为 ordem
的最后一个索引的值是 1.
您只需要稍微更改一下代码:
{% set ordem = [] %}
{% for item in cPublicaItemEstruturas %}
{% if item not in ordem %}
{% set ordem = ordem|merge([item.ordem]) %}
{% endif %}
{% endfor %}
//changes start here
<script>
var ordem = {{ ordem|json_encode }};
var i = 0;
$('#c_publica_item_estrutura_itemPai > option').each(function() {
$(this).attr('data-level', test[i]);
i++;
});
</script>
看到我在这里做什么了吗?
1- 我将 ordem
传递给 javascript 数组;
2-我遍历 select
选项;
3- 对于每个选项,我将 data-level
设置为数组当前索引的值。