Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 16.11.2014, 17:37
Интересующийся
Отправить личное сообщение для ОмаЭль Посмотреть профиль Найти все сообщения от ОмаЭль
 
Регистрация: 11.10.2014
Сообщений: 18

Сообщение от krutoy Посмотреть сообщение
<html>
<head>
<meta charset="windows-1251">
</head>
<body>
<input type="text" value="10+sin(1)" id="a">
<input type="button" value="запуск" OnClick="zap()">
<script>
function zap(){
var a=document.querySelector("#a").value
var test=function(){
   var re=/\s*(\d+)\s*([-+*\/])\s*(cos|sin)\s*\(\s*(\d+)\s*\)\s*/i
   if(!re.test(a)) return alert ("NO valid data")
   var expr=a.match(re),
       dig=(+expr[1]),
       operator=expr[2],
       resultOfFunc=Math[expr[3]](+expr[4]),
       result=dig+operator+resultOfFunc
  return eval(result)

}
alert (test())
}
</script>

</body>
</html>
К сожалению мне малость не понятна конструкция with : собственно как она работает просто при добавлении как текст к переменной source.
И можешь еще помочь с отображением, вот написал код на добавление элементов к уже существующей таблице, но не работает. Вот сам код:
<html>
<head>
<style type="text/css">
table,tr,td {border:1px solid black;}

</style>
<script type="text/javascript">

function zap(){
var h=1;
var source = document.all.a.value;
var toExecString = "with (Math) return " + source;
var result = Function("x", toExecString)(h);//значение x

return result;
}


function zap1(){
var kolvo=6;
for(var i=1;i<=kolvo;i++){
zap();
var obEl=document.getElementById("fig"); //обращение к существующей таблице
var newRow=obEl.insertRow(i); // создание строки
var newCell = newRow.insertCell(0);//создание 1 столбца
zap();
newCell.innerHTML=result; // заполнение 1 столбца
var newCell = newRow.insertCell(1); //создание второго столбца
newCell.innerHTML="2 аналогично 1-ой"; //заполнение 2 столбца
document.body.appendChild(obEl);}// делает эл дочерним

}

</script>
</head>
<body>
<br><br><br><br>
<input type="text" value="cos(x)" name="a">

<input type="button" value="запуск" OnClick="zap1()">
<br><br>
<table id="fig">
<tr>
<td></td>
<td></td>


</tr>
</table><br><br><br><br>

</body>
</html>
Ответить с цитированием
  #12 (permalink)  
Старый 17.11.2014, 00:06
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от ОмаЭль
К сожалению мне малость не понятна конструкция with : собственно как она работает просто при добавлении как текст к переменной source.
stringFromInput="cos(x)"//получаем строку из поля ввода
result=Function("x", "with(Math) return "+stringFromInput) (1)
//1) "with(Math) return "+stringFromInput вычисляется в "with(Math) return "+"cos(x)"
//2) "with(Math) return "+"cos(x)" вычисляется в строку "with(Math) return cos(x)" -- строки конкатенируются
//3) выражение Function("x", "with(Math) return cos(x)" ) раскрывается в function (x) { with(Math) return cos(x) }
//4) выполняется инлайн (function (x) { with(Math) return cos(x) })(1) , происходит подстановка 1 на место x
//5) выполняется выражение with(Math) return cos(1), результат возврата записывается в переменную

// with(Math) return cos(1), в твоем случае, это то же что return Math.cos(1)

Вообще, with, это довольно мудреная конструкция, особенно в плане работы с прототипами и глобальной областью. Но в общем случае, ты можешь считать, что она выполняет выражения-свойства и методы в контексте указанного объекта. например
with(Math) alert(sin(1)+cos(1))

Имей в виду, что ее, к сожалению, выкинули из стандарта.

Сообщение от ОмаЭль
помочь с отображением
Честно говоря, я не понял, что ты хочешь. Напиши лучше словами, опиши задачу, подробно.

Последний раз редактировалось krutoy, 17.11.2014 в 00:25.
Ответить с цитированием
  #13 (permalink)  
Старый 17.11.2014, 00:29
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

ОмаЭль,
Ты, кстати, тут и без with мог бы легко обойтись. Тут у тебя она определяющего смысла не имеет, просто сахар, как обычно.
stringFromInput="cos(x)"//получаем строку из поля ввода
result=Function("x", "return Math."+stringFromInput)(1)
alert(result)
Ответить с цитированием
  #14 (permalink)  
Старый 17.11.2014, 19:18
Интересующийся
Отправить личное сообщение для ОмаЭль Посмотреть профиль Найти все сообщения от ОмаЭль
 
Регистрация: 11.10.2014
Сообщений: 18

Сообщение от krutoy Посмотреть сообщение
Честно говоря, я не понял, что ты хочешь. Напиши лучше словами, опиши задачу, подробно.
Ну мне необходимо что бы результаты вычислений добавлялись в динамически изменяемую таблицу. Но это я уже исправил:
function zap(){
var source = document.all.a.value;
var toExecString = "with (Math) return " + source;
result = Function("x", toExecString)(h);//значение x
h=result;

return result;
}

Область видимости у result спутал, вечером уже не заметил =(
На данный момент, есть еще проблемка но сначала попробую решить сам =)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена части url через js NOLDOR123 Общие вопросы Javascript 2 15.05.2013 05:42
Замена <style> через скрипт, разрешение экрана? kabarginbogdan Общие вопросы Javascript 3 26.05.2012 18:15
Метод replace замена спецсимволов eval Общие вопросы Javascript 2 15.02.2011 20:55
Послать форму загруженную через ajax в div используя ajax ncux jQuery 2 16.08.2010 17:36
Как добавить элемент в XML через DOM используя PHP? bayah Серверные языки и технологии 6 11.08.2010 13:33