Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вставка текста в начато каждой строки (https://javascript.ru/forum/misc/19310-vstavka-teksta-v-nachato-kazhdojj-stroki.html)

qwertyuiop 01.08.2011 17:02

вставка текста в начато каждой строки
 
можноли с помощью javascript сделать, чтобы в начале каждой новой строки вставлялся номер и " | "
<div class="code">
lalalalalalala<br />
blablabla<br />
tratata<br />
lalalala<br />
</div>

переделалось в:
<div class="code">
1 | lalalalalalala<br />
2 | blablabla<br />
3 | tratata<br />
4 | lalalala<br />
</div>

может найти блок: document.getElementsByClassName("code"), добавить в начало 1 | , и потом циклом добавлять послекаждого <br />?
ток как это сделать?

ваый 01.08.2011 17:41

Цитата:

Сообщение от qwertyuiop
можноли с помощью javascript сделать, чтобы в начале каждой новой строки вставлялся номер и " | "

Можно много чего сделать. Как вариант, делать замену вхождений:
<div class="code">
    This is line #1<br />
    This is line #2<br>
    This is line #3<br />
</div>

<script>
var cont = document.querySelector('.code');
var code = cont.innerHTML;

var i = 0;
var getLine = function() {
    return ++i + '|';
};
code = code.replace(/^\s*/, getLine).replace(/<br.*?\/?>\s*(?!\s*$)/g, function() {
    return '<br />' + getLine();
});
cont.innerHTML = code;
</script>

А вообще - это хрень какая-то. Это не так делается. Каждая строчка кода обчно обернута свой контейнер, например параграф. Каждый номер строки представляет собой тоже, скажем, span, а не просто текст + |

qwertyuiop 01.08.2011 17:52

<html>
<head>
<title></title>
</head>
<body>
<div id="code">
<p>aaaaaaaaa<br />
<p>bbbbbbbbb<br />
<p>ccccccccc<br />
<p>ddddddddd
</div>
<script type="text/javascript">
lis=document.getElementById('code')
for (var i=0;i<lis.getElementsByTagName("p").length;i++){
x=i+1
firsti = lis.getElementsByTagName('p')[i]
newListElem = document.createElement('span')
newListElem.innerHTML = x+' | '
lis.insertBefore(newListElem, firsti)}
</script>
</body>
</html>

так?

qwertyuiop 01.08.2011 17:55

ваый,
ток он текст переносит, походу из-за параграфа

qwertyuiop 01.08.2011 17:59

<html>
<head>
<title></title>
<style type="text/css">
<!--
div div{display:inline}
-->
</style>
</head>
<body>
<div id="code">
<div>aaaaaaaaa</div><br />
<div>bbbbbbbbb</div><br />
<div>ccccccccc</div><br />
<div>ddddddddd</div><br />
</div>
<script type="text/javascript">
lis=document.getElementById('code')
for (var i=0;i<lis.getElementsByTagName("div").length;i++){
x=i+1
firsti = lis.getElementsByTagName('div')[i]
newListElem = document.createElement('span')
newListElem.innerHTML = x+' | '
lis.insertBefore(newListElem, firsti)}
</script>
</body>
</html>

ваый 01.08.2011 18:11

Ооооо.. Прежде чем делать что-то на javascript, надо для начала хотя бы изучить основы html, а то ничего хорошего их этого не получится.

qwertyuiop 01.08.2011 18:26

а что такое? я знаю хтмл нормально

ваый 01.08.2011 18:35

Цитата:

Сообщение от qwertyuiop (Сообщение 116670)
а что такое? я знаю хтмл нормально

1. <p>aaaaaaaaa<br />
2. <div>aaaaaaaaa</div><br />
Как-то не очень..

розовый слоник 01.08.2011 19:42

lis=document.getElementById('code')
	for (var i=0;i<lis.getElementsByTagName("div").length;i++){
	x=i+1
	firsti = lis.getElementsByTagName('div')[i]
	newListElem = document.createElement('span')
	newListElem.innerHTML = x+' | '
	lis.insertBefore(newListElem, firsti)}


жесть
во первых где var перед каждой переменной?
во вторых зачем так делать? нельзя просто через innerHTML это все делать и не писать лишние 4е строчки?

qwertyuiop 01.08.2011 21:42

розовый слоник,
как? я с DOM плохо работаю

qwertyuiop 01.08.2011 22:36

розовый слоник,
я пока пришел к такому коду:
cont=document.querySelector('.code');
code=cont.innerHTML;
i=0;
getLine=function() {
x=' '
if(i<9){
x=' 0'}
return '<span>'+x+(++i)+' | </span>';
};
code = code.replace(/^\s*/, getLine).replace(/<br.*?\/?>\s*(?!\s*$)/g, function() {
return '<br />'+'<span>'+getLine()+'</span>';
});
cont.innerHTML = code;

он работает, вставляет " 01 | ", " 02 | ", " 03 | " и так далее, но можно его как-то сократить или почистить?

ваый 01.08.2011 23:50

Он пришел к коду.. Я тебе этот код для примера написал, в IE он не будет работать.

qwertyuiop 02.08.2011 00:32

ваый,
я его подправил, у теебя 0 не писал и в тег спан не обворачивал, а как сделать, чтобы в ие работал?

ваый 02.08.2011 00:36

не использовать querySelector

qwertyuiop 02.08.2011 00:43

ваый,
напиши, как именно, пожалуйста

qwertyuiop 02.08.2011 00:44

через getElementsByClassName?

qwertyuiop 02.08.2011 00:47

i=0;
cont=document.getElementsByClassName("code")[i];
code=cont.innerHTML;
getLine=function() {
return '<span>'+(++i)+' | </span>';
};
code = code.replace(/^\s*/, getLine).replace(/<br.*?\/?>\s*(?!\s*$)/g, function() {
return '<br />'+'<span>'+getLine()+'</span>';
});
cont.innerHTML = code;

работает

qwertyuiop 02.08.2011 00:49

ваый,
в ие всеравно не работает

qwertyuiop 02.08.2011 04:20

ваый,
for (var i=0;i<document.getElementsByClassName("code").length;i++){ 
cont=document.getElementsByClassName("code")[i];
code=cont.innerHTML;
y=1
getLine=function() {
x=' '
if(y<10){
x=' 0'}
return '<span>'+x+(y++)+' | </span>';
};
code = code.replace(/^\s*/, getLine).replace(/<br.*?\/?>\s*(?!\s*$)/g, function() {
return '<br />'+'<span>'+getLine()+'</span>';
});
cont.innerHTML = code;
}

до этого дошел в ие не пашет всеравно

ваый 02.08.2011 09:22

Ну ты даешь. Как ты думаешь, почему я сказал, что с querySelector не будет работать в ие? Потому что там нету поддержки querySelector. C getElementsByClassName та же ситуация. Значит, что надо сделать? Найти функцию getElementsByClassName, которая будет срабатывать, когда нету нативной поддержки.

qwertyuiop 02.08.2011 11:49

ваый,
незнаю таких, чстно говоря незнаю даже что значит
Цитата:

Сообщение от ваый
нету нативной поддержки

напиши, как?

qwertyuiop 02.08.2011 11:56

гет елемент бу ид?

ваый 02.08.2011 12:04

Я ж уже сказал, берешь функцию getElementByClassName И используешь. Надо изучить основы.
var getLine = function() {...};

var container = document.getElementById("page");
var collection = getElementsByClass('code', container);

for (var i=0; i<collection.length; i++) {
    var code = collection[i].innerHTML;
    code = code.replace(...) ...
    collection[i].innerHTML = code;
}

qwertyuiop 02.08.2011 12:30

ваый,
if(document.getElementsByClassName) {
getElementsByClass = function(classList, node) {    
return (node || document).getElementsByClassName(classList)
}}
else {
getElementsByClass = function(classList, node) {            
var node = node || document,
list = node.getElementsByTagName('*'), 
length = list.length,  
classArray = classList.split(/\s+/), 
classes = classArray.length, 
result = [], i,j
for(i = 0; i < length; i++) {
for(j = 0; j < classes; j++)  {
if(list[i].className.search('\\b' + classArray[j] + '\\b') != -1) {
result.push(list[i])
break
}}}
return result
}}

con=document.getElementById("page");
cont=getElementsByClass("code", con);
for (var i=0;i<cont.length;i++){
code=cont[i].innerHTML;
y=1
getLine=function() {
x=' '
if(y<10){
x=' 0'}
return '<span>'+x+(y++)+' | </span>';
};
code = code.replace(/^\s*/, getLine).replace(/<br.*?\/?>\s*(?!\s*$)/g, function() {
return '<br />'+'<span>'+getLine()+'</span>';
});
cont[i].innerHTML = code;
}

в ие ставит 1 | и все дальше не пашет


Часовой пояс GMT +3, время: 04:54.