2015-12-07 2 views
0

довольно просто:заменяющие специальные символы в строках

я есть математические задачи, хранящиеся в БД, как 3+6, 5*3, 4-2 и т.д.

я хочу выход, чтобы показать соответствующие математические × с вместо * (и & divide; вместо /). , но они должны быть сохранены в БД с помощью * и/по понятным причинам (будучи «нормальными» символами против html-объектов в БД и особенно для mathjs, чтобы иметь возможность их решать из строки)

так что я ищу для того, чтобы изменить их на выходе html. Сначала я подумал о чем-то с css, но это, вероятно, означало бы, что у меня должен был быть класс для них (или это возможно?). , тогда я думал, что смогу сделать это с помощью jS/jQuery. но сначала он кажется слишком сложным.

как вы это сделаете?

(сервер работает Node.js + нефрит. Строки приходят из БД и предоставляются непосредственно на странице, так что я нужен способ, чтобы изменить символы «после»)

+1

Возможно, это было бы более целесообразно сделать на стороне сервера. На каком языке вы там работаете? Php? Можете ли вы показать код? – trincot

+0

это узел. слишком много кода, чтобы показать, что я думаю. но, как я уже сказал, он должен быть сохранен таким образом, чтобы mathjs могли его решить (и проверить, были ли правильные ответы и т. д.). – user3787706

+0

Затем я добавлял nodejs в теги вашего вопроса. – trincot

ответ

0

Что вы пытаетесь делать с CSS невозможно.

Для этого вы можете использовать метод замены строки JavaScript. , например:

var str = "5*6" 
var res = str.replace("*", "×"); 

http://www.w3schools.com/jsref/jsref_replace.asp

+0

, но если я хочу сделать это по всему миру на всей странице? т. е. без строки в var (страница отображается с помощью jade) – user3787706

0

Когда вы пишете HTML, вы можете вставить <span class='multiply'></span> для каждого *

Тогда вы можете сделать:

$("span.multiply").html("×"); 

А потом вы бы сделали то же самое с делением и так далее.

EDIT

Вы также можете попробовать что-то вроде этого:

var newHtml = $('body').html().replace(/\*/g, "×"); 
$('body').html(newHtml); 
+0

проблемы генерируются с атрибутом строки, таким как «3 * 5» в качестве члена. затем перешел в нефрит и вставлен в последнюю страницу. Я не могу вставлять классы до отображения страницы – user3787706

+0

@ user3787706 Я вижу. Делает ли то, что я показываю в своей работе по редактированию для вас? – Berzerk

+0

это должно работать, да. это было то, о чем я думал :) – user3787706

2

Вы не обязательно должны хранить символы в HTML сущностями. Пока вы включаете соответствующий метатег символов, вы сможете использовать символы юникода на своей странице.

<meta charset='utf-8'> 

Если вы не можете хранить их в базе данных как юникод, то вам придется исправить программно строки впоследствии.

var replacementSymbols: { 
    '*': '×', 
    '/': '÷' 
}; 

function replaceInString(equation) { 
    var targetSymbols = Object.keys(replacementSymbols); 

    return targetSymbols.reduce(function(string, symbol) { 
    var replacement = replacementSymbols[symbol]; 
    return string.replace(symbol, replacement); 
    }, equation); 
} 
+0

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

0

Если вы не используете что-то вроде угловой и фильтр для разбора строки, что-то подобное может быть лучшим вариантом.Если вы не можете вставить классы прежде, страница отображается, вам может понадобиться, чтобы увидеть, если оказанная данные заворачивают в чем-то вроде <pre/> тега, так что вы можете использовать соответствующий селектор:

шаблон

<div class="math-expression"> 
    3 * 4 = 12 
</div> 

логика

document.querySelectorAll('.math-expression').forEach( 
    function(elem, i, arr){ 
     s = elem.textContent 
     elem.textContent = s.replace(/\*/g, 'x') 
    } 
) 

примечание

Я не тестировал это, поскольку обычно я использую угловые фильтры для этих типов текстовых изображений.

+0

Я думаю, что это лучший ответ. Я МОГУ обернуть его в классе, поэтому я могу правильно выбрать, вместо замены символов на всей странице. спасибо – user3787706

+0

@jusopi имейте в виду, что это использование замены заменит только первый экземпляр * внутри div – Berzerk

+0

@ user3787706 Я бы определенно рекомендовал обернуть его в класс. Я предполагал, что вы ничего не могли обернуть. – Berzerk

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