2013-11-26 3 views
0

Я пытаюсь создать новый тег Anchor в JQuery с некоторым атрибутом и сохранить его в переменной, но когда я объединю его с другой переменной и добавлю в Dom, он дает [OBJECT OBJECT ]JQuery new Element Результирующий объект [object object] при конкатенировании

JsFiddle для Same: http://jsfiddle.net/T8q6T/

var a_name = "Sathwick Rao ([email protected])^$^4083372345"; 
var _name = a_name.split('(')[0]; 
var _part1 = a_name.split('(')[1]; 
var _email = _part1.split(')')[0]; 
var htmlElement = $('<a>('+_email+')</a>').attr('href','mailto:'+_email); 
$('#shara').html(_name+' '+htmlElement); 

ответ

1

Вы не можете сцепить строку с объектом, как это. Разделяют два заявления, как это:

http://jsfiddle.net/E2Rur/

$('#shara').html(_name).append(htmlElement); 
+0

спасибо, что работает :) –

+0

Вероятно, лучше избегать 2 DOM-переплавов. Цепочки операций изменения DOM - довольно плохая привычка;) Очевидно, что этот единственный случай не повлияет на производительность, однако, когда он является частью более широкого приложения, где такой подход используется много раз, это может быть вредным. – plalx

0

Это потому, что вы пытаетесь объединить объект со строкой. Следовательно, объект получает неявное преобразование в его строковое представление с помощью функции toString.

E.g.

var div = document.createElement('div'); 
'some string' + div.toString(); //"some string[object HTMLDivElement]" 
'some string' + div; //"some string[object HTMLDivElement]" 

Если вы хотите, чтобы сцепить outerHTML элемента с какой-либо другой HTML-строки, возможно, однако.

$('#shara').html(_name + ' ' + htmlElement.prop('outerHTML')); 

Однако это не обязательно самый оптимальный или чистый путь, когда это не нужно.

$('#shara').append($('<span>').addClass('name').text(_name).add(htmlElement)); 

Как вы уже заметили, я add в htmlElement к набору и выполнить один append операцию, а не две цепочки append вызовов. Это делается для того, чтобы избежать многократных перерасчетов DOM, которые довольно дороги.

Если вы не хотите оберточной span и использовать тот же раствор, вы также можете сделать:

$('#shara').append($(document.createTextNode(_name + ' ')).add(htmlElement)); 
+0

спасибо за объяснение :) –

+0

@ SJ-B Рад, что я мог бы помочь. Другой ответ может быть короче, однако он вызывает два рефлекса DOM, которые не так эффективны. Это хорошая практика, чтобы избежать их как можно больше, даже если вы, вероятно, не заметите большой разницы в этом случае;) – plalx

0

Чтобы заставить переменную htmlElement хранить строку, иногда я взломать его, как это

var htmlElement = $('<a>('+_email+')</a>').attr('href','mailto:'+_email)+""; 
$('#shara').html(_name+' '+htmlElement); 
+0

Это приведет к такому же нежелательному результату. Пожалуйста, см. Мой ответ. – plalx

Смежные вопросы