Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как извлечь class и id из строки? (https://javascript.ru/forum/misc/73542-kak-izvlech-class-i-id-iz-stroki.html)

Le7o 24.04.2018 13:53

Как извлечь class и id из строки?
 
Есть строка вида:
tag.class1.class2.class3#id

Как эту строку можно превратить в нечто вида:
<tag class="class1 class2 class3" id="id"></tag>

рони 24.04.2018 14:10

Цитата:

Сообщение от Le7o
class3

где?

j0hnik 24.04.2018 14:20

var arr = 'tag.class1.class2.class3#id'.split(/\.|#/);
var str = `<${arr[0]} class="${arr[1]} ${arr[2]} ${arr[3]} id="${arr[4]}"></${arr[0]}>`;
alert(str);

Le7o 24.04.2018 14:23

Цитата:

Сообщение от j0hnik (Сообщение 483930)
var arr = 'tag.class1.class2.class3#id'.split(/\.|#/);
var str = `<${arr[0]} class="${arr[1]} ${arr[2]} ${arr[3]} id="${arr[4]}"></${arr[0]}>`;
alert(str);

Спасибо, так уже пробовал, вся проблема в том что эта строка динамическая:
1. может не быть классов
2. может не быть id
3. id может быть в начале строки сразу после тега

рони 24.04.2018 14:29

:) может не быть и tag.

Le7o 24.04.2018 14:37

Цитата:

Сообщение от рони (Сообщение 483932)
:) может не быть и tag.

tag будет в любом случае.

Aetae 24.04.2018 14:39

/google create element by css selector

https://gist.github.com/Couto/3637328
https://github.com/hekigan/dom-create-element-query-selector/

рони 24.04.2018 14:40

Le7o,
var str = "tag.class1.class2.class3#id"
function fn(str) {
  var tag = "div", match, div = document.createElement("div"), elem;
  if (match = str.match(/^[^.#]+/)) {
    tag = match[0];
  }
  elem = document.createElement(tag);
  if (match = str.match(/#([^.#]+)/g)) {
    elem.id = match[0].slice(1);
  }
  if (match = str.match(/\.([^.#]+)/g)) {
    match.forEach(function(cls) {
      elem.classList.add(cls.slice(1));
    });
  }
  div.appendChild(elem);
  return div.innerHTML;
};
alert(fn(str))

Dilettante_Pro 24.04.2018 15:00

var str = 'div.class1#id.class2.class3';
var elem = { 'tag': '',  'class':'', 'id':''};
var flag = 'tag';
for (var i = 0; i < str.length; i++) {
     if(str[i] == '.') { flag = 'class'; elem[flag] += " "; i++ }
     if(str[i] == '#') { flag = 'id'; i++ }
     elem[flag] += str[i];
}
alert(JSON.stringify(elem));

Alexandroppolus 24.04.2018 17:15

Цитата:

Сообщение от Le7o (Сообщение 483931)
Спасибо, так уже пробовал, вся проблема в том что эта строка динамическая:
1. может не быть классов
2. может не быть id
3. id может быть в начале строки сразу после тега

наиболее острые вопросы такие:
1) может ли быть невалидный селектор
2) могут ли быть селекторы по атрибутам, с произвольными значениями.
3) селектор строго одиночный, или может оказаться что-то вроде "div span" или "div, span" ?


Часовой пояс GMT +3, время: 16:23.