Как выбрать все html-элементы, имеющие namespace?

335
15 декабря 2016, 16:21

Следующий код

function go() { 
  console.log(document.querySelectorAll("*|*")); 
}
<div>Some div</div> 
<a:div>Smth from a</a:div> 
<b:any>Smth from b</b:any> 
<p>Just a p</p> 
<button onclick="go()">Find</button>

находит все элементы на странице:

0: html
1: head
2: style
3: body
4: div
5: a:div
6: b:any
7: p
8: button
9: script
length: 10

А как найти только те, у которых задан нестандартный namespace?

0: a:div
1: b:any
length: 2
Answer 1

Могу на JQuery элементы с заранее известными нэймспейсами нати.

function go() { 
  $('.result').append($('a\\:div')); 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div>Some div</div> 
<a:div>Smth from a</a:div> 
<b:any>Smth from b</b:any> 
<p>Just a p</p> 
<button onclick="go()">Find</button> 
<div class="result"></div>

Можно и без JQuery:

function go() {
    var elements = document.getElementsByTagNameNS('*','*');
    found = [];
    [].forEach.call(elements, function(element) {
        if (element.nodeName.indexOf(':') > 0) {
            found.push(element);
        }
    });
    found.forEach(function(element) {
        document.getElementById("result").appendChild(element);
    });
}

В сниппете код почему-то не работает, а при загрузке страницы из файла в Google Chrome — работает.

Почему вы не используете JQuery?

Answer 2

Сделал так:

function go() { 
  console.log(Array.prototype.filter.call(document.querySelectorAll("*|*"), function(el) { 
    return ~el.tagName.indexOf(":"); 
  })); 
}
<div>Some div</div> 
<a:div>Smth from a</a:div> 
<b:any>Smth from b</b:any> 
<p>Just a p</p> 
<button onclick="go()">Find</button>

READ ALSO
Парсинг текста HTML с помощью jsoup

Парсинг текста HTML с помощью jsoup

Нужно вытащить текст "Количество помещений (зданий) - всего, единиц" по id (так как далее номера id будут перебираться в цикле)

501
Открытие файлов .pdf и .zip из ресурсов

Открытие файлов .pdf и .zip из ресурсов

Как открыть файлpdf из ресурсов?

381
Как сделать, чтобы после клика файл открывался в браузере?

Как сделать, чтобы после клика файл открывался в браузере?

С txt-файла при двойном клике по ссылке начинается скачивание исходного кода страницыКак сделать, чтобы он просто открывал ссылку в браузере?

272
Как добавить элементу массива стили?

Как добавить элементу массива стили?

Хочу добавить div'у с классом param-count определенные стилиНо добавляя их через элемент массива, получаю ошибку:

367