2013-09-24 5 views
1

Если у меня естьJavascript доступ к тексту до вложенного тега

<ul> 
    <li>...</li> 
    <li>...</li> 
    <li>Text before nested content 
    <ul> 
     <li>...</li> 
     <li>...</li> 
    </ul> 
    </li> 
</ul> 

Как я могу получить доступ через JavaScript только Text before nested content без сохранения его в элементе?

+1

Не знаете, что вы подразумеваете под «без сохранения его в элементе»? У вас есть эта структура как строка, и вы не хотите, чтобы ее помещали в DOM? – FrankieTheKneeMan

+0

Я имею в виду, что если у меня есть « Текст перед вложенным контентом», то это легко получить к нему (например, в jquery, 'txt = $ ('span'). Text()'), но если оно пример? –

ответ

2

Вот решение jQuery.

Вы можете установить class или id вашего li элемента (ничего, который позволит вам выбрать element легко) и использовать следующий код, чтобы получить данные, которые вы хотите:

$("<SELECTOR FOR LI>") 
    .clone() // clone the element 
    .children() // select all the children 
    .remove() // remove all the children 
    .end()  // again go back to selected element 
    .text(); // get the text of element 

Для получения более подробной информации , пожалуйста, прочитайте this article.
Вы также можете проверить этот рабочий пример в JSFiddle.

Update

Вы также можете сделать это с помощью pure JavaScript.

Просто iterate над дочерними узлами (если есть один, по крайней мере), проверьте тип узла (3, значит это text node), и если его true, concat это текст с остальными.

Вот рабочий пример этого в JSFiddle.
Для получения дополнительной информации о типах узлов, пожалуйста, проверьте this link.
Кроме того, вы можете найти полезную информацию о nodeType, nodeName и nodeValue Недвижимость here.

+0

Это очень изящное решение, спасибо. Есть также простая версия JavaScript? –

+0

Я обновил свой ответ. Пожалуйста, смотрите там. –

+0

Спасибо, очень полезно –

1

jsFiddle Demo

Вы должны повторять до тех пор, пока не найдете вложенное содержание, а затем возвращает первый childNode, который будет содержать текст.

var top = document.getElementsByTagName("ul")[0]; 
for(var child in top){ 
var c = top[child]; 
if(!c.hasOwnProperty("nodeName"))continue; 
if(c.children.length > 0){ 
    alert(c.childNodes[0].textContent); 
    break; 
} 
} 
Смежные вопросы