2009-12-26 2 views
3

Я работаю над личным проектом, связанным с некоторым программированием JQuery/native Javascript. Я надеюсь, что кто-нибудь сможет прояснить проблему, которую я вижу с моим кодом. Я запутался в отношении отношений между объектами, созданными в Javascript, и объектами, которые являются частью DOM.Разъяснение объектов Javascript, вставленных в DOM?

При использовании JQuery UI (функция вкладок) моя программа ведет себя по-разному в зависимости от того, управляю ли я свой объект из каталога Javascript или если я впервые получаю доступ к нему из DOM API, что заставляет меня думать, что эти две ссылки не равный.

Для примера:

myObject = $(document.createElement("div")).attr("id", "tabs"); 
$("body").append(myObject); 

Теперь, я обнаружил, что следующий пример работает правильно:

$("#tabs").tabs(); 

Но следующий не будет:

$(myObject).tabs(); 

Я правильно предполагая, что объект, который я получаю через $ («# tabs»), отличается или работает иначе, чем объект, который у меня есть ed вручную в Javascript (myObject)?

Есть ли какой-либо механизм, который вызывается, когда вы вставляете объект в DOM? Должен ли я не переделывать его после того, как я вставляю его в DOM, а вместо этого повторно получаю его через свое поле id?

+0

Поскольку у вас уже есть объект jQuery, нет необходимости писать '$ (myObject) .tabs()', как уже указывал cletus; правильным способом является выполнение 'myobject.tabs()'. – kiamlaluno

ответ

5

Создание элементов с необработанными методами JS ничем не отличается от любого элемента, на который ссылается jQuery, за исключением того, что найденные выражениями, такими как $(...), обернуты в объект jquery.

Поскольку вы делаете это:

myObject = $(document.createElement("div")).attr("id", "tabs"); 

у вас уже есть объект JQuery, так что вы должны быть в состоянии сделать это:

myObject.tabs(); 

Поступая:

$(myObject).tags(); 

вы эффективно это делаете:

$($(document.createElement(...)...); 

, и я не уверен, что такое ожидаемое поведение.

Кроме того, иметь в виду, что вы можете сделать это (и должно способствовать таким образом):

var myObject = $("<div></div>").attr("id", "tabs"); 

var делает его локальный характер (что вы хотите 95% времени), и вы можете создать произвольная разметка с jquery без использования исходных методов JS.

+0

Хотелось бы знать, почему это было downvoted ... – cletus

+0

+1 для 'var' и упрощенного создания элементов. Не понимаю, почему это было отклонено. –

+0

круто, спасибо за совет. Мне нравится подход $ ("

). Действительно ли это для этого?$ ("
") –