Вставка данных в массив объектов - PullRequest
0 голосов
/ 28 февраля 2012

Хорошо, у меня есть этот пустой массив объектов.Я динамически нахожу каждый узел на веб-странице, и каждый узел будет иметь свой собственный объект и свойства.Мне нужен способ выбросить нужные мне значения в соответствующие им свойства объектов

Так, например, я нахожу узел body.Теперь у меня есть специальный маленький объект для этого узла.Мне нужно добавить почти все об этом маленьком парне в свойства его объекта.

Так что мне нужно, чтобы он выглядел так:

Превращая это:

<html>
    <body style="margin:0; padding:0;" title="My Title">
        <p>some text</p>
        <div class="wrapper"></div>
        <footer></footer>
    </body>
</html>

В это:

this.nodesInfo = [ // All nodes in the page's DOM
    {
        type: 'body', // ex: body, section, aside, div, etc.
        id: 'myID', // the Id of that element
        class: ['myClass1', 'myClass2'], // the class/class' of that element
        depth: '2', // the level in the page's DOM in which that element sits, this will be an integer
        parent: 'html', // that elements direct parent Node 
        children:['div.wrapper', 'p', 'footer'], // any child Nodes that, that element may be a parent to
        text: '', // the text inside that element if any exists
        attributes: ["style=margin:0; padding:0;", "title='My Title'"] // all attributes of this node
    }
];

Конечно, он будет циклически проходить через каждый обнаруженный узел и делать это соответственно для каждого узла, пока не закончатся узлы.

Класс, потомки иАтрибуты properties - это массивы для простой возможности кратных любого из них.Все остальное - просто строка, поскольку узел не может иметь более одного идентификатора, заголовка или прямого родительского тега.

Если узел не содержит некоторые из этих свойств, то это свойство останется пустым / null /undefined.


Мой вопрос прост.Возможно ли это, если бы мне не пришлось вместо этого создавать каждый объект отдельно и помещать их в мой массив nodesInfo?

Я думаю, что самый простой способ сделать это - создать объект каждого узла изатем помещаем их все (после того, как они все созданы) в массив.

1 Ответ

1 голос
/ 28 февраля 2012

Однажды вечером я строил что-то подобное.Это должно работать, и вы можете легко добавить больше вещей.http://jsfiddle.net/elclanrs/UHbMa/

$.fn.buildTree = function() {
    var tree = {};
    this.find('*').andSelf().each(function(i, v) {
        var parents = $(this).parents().length - 1,
            depth = 0;
        while (depth < parents) {
            depth++;
        }
        tree[v.tagName.toLowerCase() + '(' + i + ')'] = {
            id: (v.id) ? '#' + v.id : '',
            className: (v.className) ? '.' + v.className.replace(' ', '.') : '',
            depth: depth
        };
    });
    return tree;
};


// Then you can do this...

var tree = $('#element').buildTree();
for (var tag in tree) {
    // Get your variables
    var tag.match(/\w+/), // Get rid of `(n)`
        id = tree[tag].id,
        className = tree[tag].className,
        depth = tree[tag].depth;
    html = 'something'; 

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