2016-06-06 5 views
1

Я считаю, что моя проблема довольно проста, но, проведя некоторое время поиска, я не могу найти удовлетворительное решение.Проверьте, является ли DocumentFragment обычным узлом

У меня есть элемент DocumentFragment, и я хочу проверить, полностью ли он завершен некоторым тегом html. Вот псевдо-код, который я пытаюсь включить в JavaScript:

entireTagSelected = function (selRange) { 
    var documentFragment = selRange.cloneContents(); 
    if (documentFragment is wrapped entirely by something) { 
    return something; 
    } 
    return undefined; 
} 

Для DocumentFragment как:

<span>Te<b>s</b>t</span> 

функция должна возвращать объект диапазона.

Но для фрагментов, таких как:

Some text<span>Test</span> 

он должен вернуть неопределенными.

ответ

1

Вы можете получить детей documentFragment, и если length равен 1 и его nodeType == 1, то это единственный элемент.

function entireTagSelected (selRange) { 
 
    var documentFragment = selRange.content 
 
    var children = documentFragment.childNodes 
 
    if (children.length == 1 && children[0].nodeType == 1) 
 
    return children[0] 
 
} 
 

 

 
var template1 = document.createElement('template') 
 
template1.innerHTML = "<span>Te<b>s</b>t</span>" 
 

 
var template2 = document.createElement('template') 
 
template2.innerHTML = "Some text<span>Test</span>" 
 

 
var template3 = document.createElement('template') 
 
template3.innerHTML = "Only text" 
 

 
console.log(entireTagSelected(template1)) 
 
console.log(entireTagSelected(template2)) 
 
console.log(entireTagSelected(template3))