2009-09-01 3 views
0

У меня есть предложение, которое я хотел бы скрыть слова с помощью Javascript. Например, скрывая первое и шестое слово или что-то в этом роде. Исходя из фона PHP, я предполагаю, что это будет похоже на это.Использование Javascript для скрытия слов в строке

  1. У вас есть DIV с предложением в нем.
  2. Вы получаете значение DIV (текстовое предложение).
  3. Вы разделили текст пробелами «», чтобы получить каждое слово.
  4. Затем вы окружаете каждое слово с помощью SPAN и id или класса.
  5. Вы помещаете все слова с пролетами вокруг них обратно в DIV.
  6. После взаимодействия с пользователем (или события таймаута) вы можете скрыть каждый SPAN [текст] SPAN по мере необходимости.

Это правильный способ справиться с этим?

+0

Пространства, в которых слова, которые были скрыты, рушится? или он остается открытым с пробелом? – Patrick

+0

Я бы хотел, чтобы пространство для хранения сохранялось, поэтому я предполагаю, что пробелы будут просто вставлены с каждым SPAN, который был помещен обратно в DIV. – Xeoncross

+0

Извините, я пропустил ваш вопрос. Мне хотелось бы, чтобы каждое занятое слово оставалось неповрежденным, а не сокращалось. – Xeoncross

ответ

1

Я бы сделал это точно так, как вы описали. Фактически, я действительно сделал:

<div> 
The dog jumps over the log. 
</div> 
<script type="text/javascript"> 
function boxWords(textNode) { 
    var frag = document.createDocumentFragment(), 
     // trim leading and trailing whitespace to avoid empty elements 
     words = textNode.nodeValue.replace(/(^\s+)|(\s+$)/g, '').split(' '); 

    for(var i = 0, len = words.length; i < len; ++i) { 
     frag.appendChild(document.createElement('span').appendChild(
      document.createTextNode(words[i])).parentNode); 
     frag.appendChild(document.createTextNode(' ')); 
    } 

    textNode.parentNode.replaceChild(frag, textNode); 
} 

var div = document.getElementsByTagName('div')[0]; 
boxWords(div.firstChild); 

// underline the 4th word 
div.getElementsByTagName('span')[3].style.textDecoration = 'underline'; 
</script> 
+0

Очень приятно, теперь мне просто нужно выяснить, как сохранить пустое пространство при скрытии элемента. – Xeoncross

+0

вместо style.textDecoration = 'underline'; use style.visibility = 'hidden' – Patrick

+0

Ну, это скрывает его, но мне нужно сохранить пробелы, которые слово заняло. – Xeoncross

0

Я не уверен, какие цели шаги 4-> 6 служить? Если на шаге 3 вы получили разделенные слова, вы можете сохранить этот массив и всегда иметь доступ к соответствующему слову, когда вам нужно что-то сделать с ним.

Ваш путь вам еще предстоит выяснить, какой span/id/class нужно испортить, когда вы хотите что-то сделать. Вы по существу создавая ту же самую проблему yourlsef в другом формате,

+0

Ну, как я уже сказал, если я хочу скрыть первое и шестое слово или что-то еще, то я предполагаю, что они должны быть объектами DOM, которые могут быть «скрыты» с дисплеем: none. – Xeoncross

+0

уверен, но оберните их, когда вам нужно, и когда вы точно знаете, какой из них вам понадобится. Не хватайте их всех, обертывая их, а затем все еще сталкиваешься с проблемой поиска того, что вам нужно снова и снова. – Steerpike

+0

А, я думаю, я понимаю, о чем вы сейчас говорите - одно из событий, которое вы хотите учесть, - это возможность щелкнуть одним словом и получить эффект, да? В этом случае ваше решение в порядке. – Steerpike

0

Я думаю, что общая идея имеет смысл да ...

Получить innerhtml из DIV .. разбить его на «», а затем для каждое слово в значении помещает его в div с уникальным идентификатором ... вы можете сохранить относительный размер слова в пространстве, сделав невидимым, или вы можете свернуть предложение, сделав innerhtml = "".

function divclick(id) 
{ 
    //document.getElementById(id).style.visibility="hidden"; 
     // OR 
    //document.getElementById(id).innerHTML = ""; 
} 

Что касается получения раскола Див и повторно отображается в свои дивы отдельное слово ..., что не должно быть большое дело ... только думаю, что вы должны принять во внимание то, что события заставляя слова исчезать или появляться.

+0

Ну, я не уверен, какое событие приведет к исчезновению слов - это может быть mouseclick, timeout или onLoad. Я просто хочу убедиться, что у меня есть простой способ доступа к словам, когда настало время их скрытия. – Xeoncross

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