Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Закрыть текущий элемент div или span


Автор: En_t_end 7.4.2010, 20:11
Код

<!-- ... -->
<div>
<script>
<!-- Закрыть текущий элемент -->
</script>
<!-- ... -->
<span>
<script>
<!-- Закрыть текущий элемент -->
</script>
<!-- ... -->

Т.е мне нужен такой скрипт, который бы закрывал автоматически текущий span либо div корректно, т.е для span нужно сгенерить </span>, для div - </div>

На самом деле, я был бы рад, если бы можно было узнать тип элемента в котором находится <script>, по идее должно быть что-то вроде document.nodeParent

Автор: skyboy 7.4.2010, 20:20
если вместо допотопного document.write использовать для генерации контента document.createElement, то будет намного проще - не надо будет явным образом "закрывать теги".
в javascript-коде не только никак не обратиться к родительскому элементу для текущего <script>, но и никак не получить доступ к самому тегу <script>.
если HTML код, включая тег <script>, формируешь ты, то можешь сделать конструкцию:
Код

<script id="script184979">
.....
document.getElementById('script184979').parentNode.tagName // то, что ты хотел
...
</script>

Автор: En_t_end 7.4.2010, 20:28
Цитата(skyboy @  8.4.2010,  00:20 Найти цитируемый пост)
если вместо допотопного document.write использовать для генерации контента document.createElement, то будет намного проще - не надо будет явным образом "закрывать теги".

Тут немного другая ситуация smile я транслирую wiki-код с моими тегами(открывающийся и закрывающийся), причем открывающихся - 2 типа, которые могут транслироваться как в div, так и в span, а вот закрывающийся только один.

Спасибо, работает.
Код

<script id="ttt">
var tagname = (document.getElementById("ttt").parentNode.tagName).upper
if(tagname == "SPAN")
    document.writeln("</span>")
else if(tagname == "DIV")
    document.writeln("</div>")
</script>

Автор: skyboy 7.4.2010, 21:03
Цитата(En_t_end @  7.4.2010,  19:28 Найти цитируемый пост)
я транслирую wiki-код с моими тегами

на стороне клиента при помощи javascript? при помощи операций над входящим текстом? почему тогда сразу не заменять и открывающий, и закрывающий теги?

Автор: ksnk 7.4.2010, 23:37
Цитата(En_t_end @  7.4.2010,  20:28 Найти цитируемый пост)
wiki-код с моими тегами(открывающийся и закрывающийся), причем открывающихся - 2 типа, которые могут транслироваться как в div, так и в span, а вот закрывающийся только один


Тоесть есть текст (строка) в которой нужно заменить все из пары открывающих тегов на div и span, а все закрывающие теги - на тот, который был открыт последним? 
Простой цикл. Ищем (регуляркой) первый попавшийся из открывающих тегов или закрывающий. Если тег открывающий, на стек ложим тип тега. А самого его - заменяем. Если закрывающий - со стека берем тег и закрываем его. Если ничего не нашли - наши победили...
какбэ ничего сложного ...

Цитата(En_t_end @  7.4.2010,  20:28 Найти цитируемый пост)
Спасибо, работает.
Код

<script id="ttt">
var tagname = (document.getElementById("ttt").parentNode.tagName).upper
if(tagname == "SPAN")
    document.writeln("</span>")
else if(tagname == "DIV")
    document.writeln("</div")
</script>


Точно работает?  smile 

Автор: En_t_end 8.4.2010, 07:16
skyboy, 
ksnk, 
У меня нет всего wiki-текста целиком. На каждое вхождение в текст моих тегов стандартный wiki-обработчик вызывает мой триггер, который генерирует html.

Автор: skyboy 8.4.2010, 10:37
Цитата(En_t_end @  8.4.2010,  06:16 Найти цитируемый пост)
мой триггер, который генерирует html. 

триггер на РНР или на javascript?
если на РНР, то можно запоминать последний открытый тег(или даже стек открытых тегов) в http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static и это будет удобнее, чем формировать javascript, который будет подправлять DOM за счет document.write

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)