Вид Codeigniter - добавить элемент перед другим - PullRequest
1 голос
/ 21 апреля 2020

Я работаю с codeigniter MVC. Допустим, у меня есть json как:

[{id:1, parent: null}, {id:2, parent:null}, {id:3, parent:1}]

На мой взгляд, я go через массив foreach такого типа, и мне нужно сначала добавить значение с id = 1, затем все значения с parent = 1, затем значения с id = 2 и все значения с parent = 2 и т. д. (в этом случае id = 3 пропускается, поскольку он уже был добавлен как parent = 1)

Для этого у меня есть ~ 300 sql строк и AFAIK. Я не могу сделать оператор sql, который дает мне нужный мне порядок (если это возможно, это решит мою проблему).

Так что мне нужно найти другой путь. Я думал о загрузке страницы и на $(document).ready сделать ajax вызов и принести данные, но в этом случае у меня проблема в том, что, поскольку это форма, в случае ошибки, я хочу перезагрузить страницу в том же состоянии пользователь отправил его. Поскольку PHP собирается сохранить это состояние, я не могу сделать это с помощью вызова ajax.

Другое решение, которое я подумал, но думаю, что в долгосрочной перспективе это сложно, это сделать смесь между PHP и JS, как

<script><?php (parent != null) ? $("#" + parent).append(content)?></script>

Но это дает мне немного проблема в том, что у некоторого контента есть \ n и вещи, которые я не могу контролировать.

У кого-нибудь была проблема, подобная этой, или у кого-нибудь есть способ ее решить?

Я бы хотел избежать решения, которое заставит меня go через этот массив много раз

1 Ответ

0 голосов
/ 21 апреля 2020

Этот код может вам помочь.

<!DOCTYPE html>
<html>
<head>
    <title>test</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
    <style type="text/css">
      #json_container span{
        display: block;
      }
    </style>
</head>
<body>

<div id="json_container"></div>
<script type="text/javascript">
var jsonData = [{id:1, parent: null}, {id:2, parent:null}, {id:3, parent:1}, {id:4, parent:2}];
$jsonContainer = $('#json_container');

$(function(){          
    $.each(jsonData, function(i, item) {
        $elm = '<span id="json_el'+item.id+'">'+item.id+'</span>';
        if($('span#json_el'+item.parent).length > 0)
          $($elm).insertAfter('span#json_el'+item.parent);                  
        else
          $jsonContainer.append($elm);
    });
});
</script>
</body>
</html>

Здесь я добавил span, чтобы отделить каждый элемент с отображением в виде блока. Он будет добавлен, если его родитель не существует.

FIDDLE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...