2010-02-28 2 views
4

Предположим, что у меня есть следующий HTML:CSS/JavaScript: получить пользователем видимый текст элемента

<div id="test"> 
    <span style="display:inline;">foo</span> 
    <span style="display:none;">bar</span> 
    <span style="display:inline;">baz</span> 
</div> 

.. есть какой-то способ в JavaScript для меня, чтобы получить на выходе «Foo Баз» (не " foo bar baz ")?

$('test').textContent возвращает последний, а innerHTML делает эквивалент.

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

Однако он не должен требовать ничего, кроме JS или Flash, он не должен требовать какого-либо взаимодействия с пользователем, и он не должен возвращать «бар».

Идеи?

ответ

4

Вы можете сделать это, но учтите, что не будет иметь место, как ваш пример, потому что нет места в разметке:

$("#test :visible").text() 

Вот альтернатива, как ваш пример разнесены для каждого диапазона :

var s = new Array(); 
$("#test :visible").each(function() { 
    s.push($(this).text()); 
}); 
alert(s.join(' ')); 
+0

Это именно то, что я хотел. ИДЕАЛЬНО. Мне не нужно делать добавление массива, так как я могу просто добавить пространство внутри каждого текста тега привязки. Замечание: ваш метод требует jQuery. – Sai

+0

PS Выполнено и выполнено: http://cssfingerprint.com :) В Safari этот метод в 4 раза быстрее предыдущего. В Firefox это не улучшение. Все еще стоит. Благодаря! – Sai

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