2012-05-12 4 views
1

Можно создать дубликат:
Getting text within element excluding decendantsКак выбрать элемент, кроме «div» внутри <td>?

Я пытаюсь использовать :not и .not(), но до сих пор не работает. Я хочу, чтобы результат был только «в понедельник».

Пример разметки:

<td id="day_id"> 
    Monday 
    <div class='spec_class'> 
    <span>One</span> 
    <span>Two</span> 
    </div> 
</td> 
+0

КТ: Текстовые узлы не являются элементами. Внутри ячейки таблицы нет другого элемента, кроме 'div'. –

+1

@FelixKling: Приятно найти! (Этот вопрос повторяется.) –

+0

О, это действительно дублируется, пожалуйста, пожалуйста, удалите или закройте меня. – lovepong

ответ

3

Вы должны смотреть на textNodes элемента

var td = jQuery("#day_id"); 
var textNodes = td.contents().filter(function() { 
     return this.nodeType == 3; 
    }); 

console.log(textNodes.text()); 

JSFiddle

+0

Он сказал, что хочет «Понедельник», а не «Понедельник Один Два» –

+0

Здесь [jsfiddle] (http://jsfiddle.net/ERbWp/1/) с примером вопроса. Возможно, добавление '$ .trim (...)' было бы лучше. – scessor

+0

Я думал, что это хорошее решение для его решения. спасибо – lovepong

3

JQuery на самом деле не «делать» текстовые узлы, так что это одна из немногих мест, где вы лучше использовать сырые методы DOM:

var text = "", 
    node; 
for (node = $("#day_id")[0].firstChild; node; node = node.nextSibling) { 
    if (node.nodeType === 3) { // 3 = text node 
     text += node.nodeValue; 
    } 
} 
console.log("[" + text + "]"); // "[ Monday ]" 

Live example | source

Обратите внимание на пробелы до и после, поскольку есть текстовые узлы с пробелами до и после текста «Понедельник». Вы можете использовать $.trim(), чтобы избавиться от него.

Больше чтение:

Смежные вопросы