Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JS скрипт замены html (https://javascript.ru/forum/misc/51634-js-skript-zameny-html.html)

krutoy 13.11.2014 19:54

candro,
Ну так, убери кнопку, и вызывай ф-цию напрямую, какие проблемы? Я кнопку в демонстрационных целях добавил

krutoy 13.11.2014 19:57

candro,
<html>
<head>
<meta charset="windows-1251">
<style>
.block1{background: red}
.block2{background: green}
</style>
</head>
<body>
 
<div id="wrap">
<div class="block1">block1</div>
<div class="block2">block2</div>
</div>
 
<script>
 
wrap=document.querySelector("#wrap")
 
;(function(){
   var re=/<div.*block1.*\/div>/,
       block=wrap.innerHTML,
       block=block.replace(re, "<div class='block2'>block2</div>")
       wrap.innerHTML=block
})()
 
</script>
 
</body>
</html>

candro 13.11.2014 20:16

Понятно, а как, но что-то разобраться не могу, вот если заменять в коде только начало блока <div class="block1"> на
<div class="block2"></div><div class="block1">. Что поправить нужно?

<script>

wrap=document.querySelector("#wrap")

;(function(){
var re=/<div.*block1.*\/,
block=wrap.innerHTML,
block=block.replace(re, "<div class='block2'>block2</div><div class='block1'>")
wrap.innerHTML=block
})()

</script>

Так нужно?

danik.js 13.11.2014 20:30

Цитата:

Сообщение от krutoy
хотелось бы, все-таки, понять логику и специфику его поведения

Просто пиши var при объявлении переменных , как все нормальные люди и ни о какой специфике думать не нужно)

danik.js 13.11.2014 20:31

Ты ведь в курсе, что объявление с var и без - не одно и тоже?

krutoy 13.11.2014 20:34

Цитата:

Сообщение от danik.js
Ты ведь в курсе, что объявление с var и без - не одно и тоже?

В глобальной области видимости, одно и то же, вроде.

krutoy 13.11.2014 20:42

candro, проще всего наверное так
<html>
<head>
<meta charset="windows-1251">
<style>
.block1{background: red}
.block2{background: green}
</style>
</head>
<body>
  
<div id="wrap">
<div class="block1">block1</div>
<div class="block2">block2</div>
</div>
  
<script>
  
wrap=document.querySelector("#wrap")
  
;(function(){
   var re=/<div\s+class\s*=\s*['"]\s*block1\s*['"]/,
       block=wrap.innerHTML,
       block=block.replace(re, "<div class='block2'")
       wrap.innerHTML=block
})()
  
</script>
  
</body>
</html>

krutoy 13.11.2014 20:45

danik.js,
Там есть нюансы, конечно, криво-реализационно-специфичные:). Но принципиальную разницу я только в ноде раньше замечал.

А если все переменные без вар заменить на window.variable работает?

candro 13.11.2014 20:52

Получается он добавляет после блока1 блок2, верно?

krutoy 13.11.2014 20:55

Цитата:

Сообщение от candro
Получается он добавляет после блока1 блок2, верно?

Нет. Он меняет текст <div class="block1" на текст <div class='block2
Кусок текста меняет. А блок2 там как был так и остался.


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