получение атрибутов из пар значений имени строки html

#javascript #html #css

#javascript #HTML #css

Вопрос:

У меня есть такая строка

 '<img id="1" data-name="test" src="img_01.jpg" />'
  

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

пока у меня есть это, но я не знаю, как извлечь имя и значение атрибута

 createNode = function(a, b) {
  let name = null;
  let el = null;

  if(/<[a-z][sS]*>/i.test(a)) {
    name = a.match(/(w )/i)[1];
    el = document.createElement(name);
    // get attributes and apply them
    return el;
  } 
}

createNode('<img id="1" data-name="test" src="image_01.jpg" />');
  

Ответ №1:

Вы можете использовать DOMParser для синтаксического анализа строки HTML в фактический элемент, а затем просто вернуть этот элемент:

 const createNode = (htmlStr) => {
  const doc = new DOMParser().parseFromString(htmlStr, 'text/html');
  const element = doc.body.children[0];
  return element;
};

const img = createNode('<img id="1" data-name="test" src="image_01.jpg" />');
console.log(img.id);  

Если вам пришлось идти по маршруту регулярных выражений, то есть возможность:

 createNode = function(a, b) {
  const [, tagName, attribStr] = a.match(/^<(S )(.*)>$/);
  const element = document.createElement(tagName);
  let match;
  const re = / *([^=] )="([^"]*)"/g;
  while (match = re.exec(attribStr)) {
    const [, attribName, attribVal] = match;
    element.setAttribute(attribName, attribVal);
  }
  return element;
}

const img = createNode('<img id="1" data-name="test" src="image_01.jpg" />');
console.log(img.outerHTML);  

Комментарии:

1. каков наилучший способ проверить, является ли строка html, которая анализируется в

2. Вы можете проверить, не завершается ли parseFromString вызов с ошибкой, и проверить element , существует ли возвращенное значение, чтобы узнать, можно ли преобразовать переданную строку в элемент

3. какой наилучший способ проверить, является ли «a» строкой html

4. Смотрите мой комментарий выше — вы можете проверить parseFromString , не сработал ли метод, и если это не так, вы можете проверить, существует ли element (элемент at doc.body.children[0] . Если оно не существует, значит, переданная строка была недействительной.