2014-11-18 2 views
0

У меня есть этот массив в JavaScript:Javascript массив преобразования строки

[div.parts, div.editor, div.inside-1, div.container-2, div.inside-wrapper, div#content, div.whitebgpan, div, div#maindiv, body, html] 

Как я могу преобразовать его в строку, так что на выходе будет:

div.parts div.editor div.inside-1 div.container-2 div.inside-wrapper div#content div.whitebgpan div div#maindiv body html 

вот мой код:

jQuery(document).on('click', function(e){ 
    var ClickedParents = jQuery(e.target).parents(); //Get all parents of clicked element 
    var ClickedParents_array = jQuery.makeArray(ClickedParents); //Make array 
    console.log(ClickedParents_array); //Show output in colsole 
}); 
+0

Можете ли вы быть более ясным относительно нужного формата вывода? Не имеет смысла иметь строку, построенную из элементов DOM. Вы пытаетесь зарегистрировать текстовое содержимое этих элементов или ...? – nnnnnn

+0

Хм, разве вы не задали этот вопрос вчера? Вы удалили его, но этот вопрос выглядит очень похожим. –

+0

yes @Jack, у меня есть отрицательный рейтинг по этому вопросу, поэтому я удалил, и теперь я отправляю его снова с более конкретной формулировкой. –

ответ

0

Вы можете использовать комбинацию функции JQuery each и Array.Join фу в JavaScript чтобы решить эту проблему.

DEMO: http://jsfiddle.net/zay015ex/1/

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

HTML

<div id="parent"> 
    <div id="child1"></div> 
    <div id="child2"></div> 
    <div id="child3"></div> 
    <div id="child4"></div> 
    <div id="child5"></div> 
</div> 

JavaScript

var arrayOfObjects = $('#parent').children(); 
var ids = []; 

$.each(arrayOfObjects, function(i, val) 
    { 
     ids.push(val.id); 
    }); 

var idString = ids.join(' '); 
  • Вы можете прочитать больше о функции here JQuery each.

  • Вы можете прочитать больше на Array.Join функции в JavaScript
    here.

+0

Извините, я неправильно прочитал вопрос, это объекты jQuery. Позвольте мне исправить ответ. –

0

===== Обновление =====

Ok, следующий код проверяется, просто откройте консоль и вставьте. он выбирает все теги div и конвертирует в строку выбора.

$.map($('div'),function toSelector(elem){ 
    var jqObj = $(elem) 
    var tag = jqObj.prop('tagName').toLowerCase() 
    var classes = jqObj.attr('class') ? '.' + jqObj.attr('class').split(' ').join('.') : '' 
    var ids = jqObj.attr('id') ? '#' + jqObj.attr('id').split(' ').join('#'): '' 
    return tag + classes + ids 
}) 

===================

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

function toSelector(jqObj){ 
    var tag = jqObj.prop('tagName').toLowerCase() 
    var classes = jqObj.attr('class') ? '.' + jqObj.attr('class').split(' ').join('.') : '' 
    var ids = jqObj.attr('id') ? '#' + jqObj.attr('id').split(' ').join('#'): '' 
    return tag + classes + ids 
} 

array.map(toSelector) 
+0

Это дает мне последнее значение, я пробовал $ .each(), но все напрасно –

0

Я думаю, что под код поможет вам.

<script type="text/javascript"> 
 
      String.prototype.replaceAll = function (token, newToken, ignoreCase) { 
 
       var _token; 
 
       var str = this + ""; 
 
       var i = -1; 
 
       if (typeof token === "string") { 
 

 
        if (ignoreCase) { 
 
         _token = token.toLowerCase(); 
 
         while((
 
          i = str.toLowerCase().indexOf(
 
           token, i >= 0 ? i + newToken.length : 0 
 
           )) !== -1 
 
         ) { 
 
          str = str.substring(0, i) + 
 
          newToken + 
 
          str.substring(i + token.length); 
 
         } 
 
        } else { 
 
         return this.split(token).join(newToken); 
 
        } 
 
       } 
 
       return str; 
 
      }; 
 
      try{ 
 
       var arr = []; 
 
       arr.push('div.parts', 'div.editor', 'div.inside-1', 'div.container-2', 'div.inside-wrapper', 'div#content', 'div.whitebgpan', 'div', 'div#maindiv', 'body', 'html'); 
 
       var stringData = arr.toString();     
 
       stringData = stringData.replaceAll(",", " "); 
 
       console.log(stringData); 
 
     
 
      }catch(e){ 
 
       alert(e) 
 
      } 
 
     </script>

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