Връщане на HTML елементи

Използвам малко JavaScript за създаване на нови HTML елементи и след това ги връщам с помощта на метода за инжектиране на MooTools.

 display: function() {
        var threadTitle = new Element('h2',{
            'class': 'postItem',
            'data-id': this.id,
            'text': this.title,
            'href': '#',
            events: {
                click: function(){
                    $('newComment').setStyle('visibility', 'visible');
                    var id = this.get('data-id');
                    $('thread').value = id;
                    callThread(id);
                }
            }
        });

        var deleteT = new Element('a',{
            'class': 'deleteItem',
            'data-id': this.id,
            'text' : 'Delete',
            'href' : '#',

            events: {
                click: function(){
                    var deleteID = this.get('data-id');
                    deleteThread(deleteID)
                }
            }
        });

        var editBtn = new Element('input',{
            'class': 'mt-btn',
            'value': 'Edit',
            'type': 'button',
            'data-id': this.id,
            'text' : 'Edit',
            'href' : '#',
            events: {
                click:  function(){


                }
            }
        });



        deleteT.inject(threadTitle);
        editBtn.inject(threadTitle);
        return threadTitle;
    }
});

Това очевидно връща новите елементи вътре в h2, докато инжектирам в него. Има ли начин да се създаде всеки един извън H2, така че в известен смисъл

<h2></h2>
<a></a>
<input></input>

Опитах да използвам начина на MooTools за използване на editBtn.inject(threadTitle, 'after');, но това изглежда не работи и нищо не се връща. Въпросът е как да върна елементите на страницата един след друг, без да бъдат инжектирани в елемента h2.


person joshuahornby10    schedule 08.05.2013    source източник
comment
Чакай, използваш ли jQuery?   -  person Ian    schedule 09.05.2013
comment
Причината да заявя това като всеки въпрос, който съм публикувал с искане за отговор на MooTools, изглежда, че получавам отговор на jQuery. Благодаря за този коментар, макар и наистина полезен.   -  person joshuahornby10    schedule 09.05.2013
comment
Напълно се шегувам. Повярвай ми, разбирам напълно. Ако маркирате mootools, а не jquery, не трябва да получавате jQuery отговор   -  person Ian    schedule 09.05.2013
comment
Мога ли да поставя Use jQuery като мой отговор?   -  person Explosion Pills    schedule 09.05.2013
comment
Не използвам mootools, но искате ли да върнете и трите препратки към тези елементи? Защо не върнете масив с 3-те променливи вътре?   -  person bfavaretto    schedule 09.05.2013
comment
Търся да върна всеки HTML елемент един след друг, не знам как да върна елементи без използване на метода за инжектиране.   -  person joshuahornby10    schedule 09.05.2013
comment
@Ian Да, би си помислил - stackoverflow.com /questions/16430491/   -  person joshuahornby10    schedule 09.05.2013
comment
Съжалявам, но не разбирам, функциите не могат да върнат повече от една стойност.   -  person bfavaretto    schedule 09.05.2013
comment
@joshuahornby10 Точно така, надявам се. Но знам, че светът не е съвършен и се случва по-често, отколкото трябва   -  person Ian    schedule 09.05.2013
comment
@ExplosionPills Разбира се, че можеш...знаеш как ще свърши :)   -  person Ian    schedule 09.05.2013
comment
Създавам всеки елемент и единственият начин да ги „върна“ на страницата е да ги инжектирам в елемента h2. Искам да ги върна, така че да не се инжектират в h2, а да се връщат един след друг като втория кодов блок в OP.   -  person joshuahornby10    schedule 09.05.2013


Отговори (1)


Опитах да използвам начина на MooTools за използване на editBtn.inject(threadTitle, 'after');, но това изглежда не работи и нищо не се връща.

Мисли, че проблемът там е, че threadTitle няма родител, когато правите това. Ако няма родител, MooTools ще се затрудни да инжектира нещо „след“ него, тъй като това изисква инжектиране в елемента parent.

Ако първо поставите threadTitle в DOM, подозирам, че editBtn.inject(threadTitle, 'after'); и това ще работи добре.

Сравнете това, което не работи: Копие на живо

var p = new Element('p');
p.set("html", "This is the <code>p</code> element");

var div = new Element('div');
div.set("html", "This is the <code>div</element> inserted <em>after</em> the <code>p</code>");
div.inject(p, 'after');

p.inject(document.body);

...с това, което прави: Копиране на живо

var p = new Element('p');
p.set("html", "This is the <code>p</code> element");
p.inject(document.body);

var div = new Element('div');
div.set("html", "This is the <code>div</element> inserted <em>after</em> the <code>p</code>");
div.inject(p, 'after');

... разликата е, че елементът p е добавен към DOM, преди да се опитаме да инжектираме div след него.

person T.J. Crowder    schedule 08.05.2013
comment
А, да, разбирам. Перфектно, един въпрос, вместо да инжектирам в document.body, мога ли да инжектирам в div? това ще бъде ли p.inject($(divName)); - person joshuahornby10; 09.05.2013
comment
@joshuahornby10: Докато елементът има родител, не трябва да има значение какъв е този родител. Например, вижте това: jsfiddle.net/p2M3h/2 Родителят дори не е в DOM все още в момента, в който инжектирам след едно от неговите деца. Проблемът (мисля) е, че bar.inject(foo, 'after') основно се изпълнява като необработена DOM операция foo.parentNode.insertBefore(bar, foo) и така, ако foo няма родител, не може да работи. - person T.J. Crowder; 09.05.2013
comment
Някой каза ли MooTools!? - person samis; 10.12.2015