Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use javascript to get html special characters in text input

I want to sent some html special character to text field and then later use javascript to get it back in its original format: like if I sent "&pi", it will shows "π" on the text input, and when I use javascript to get it back, I should get "&pi", but I only can get "π", not "&pi". Please help, my code is like the following:

<script type="text/javascript"> 
function qpush(a) {
    document.getElementById('input').value += a;
}

function show(a) {
    alert(document.getElementById('input').value);
}
</script>

<input type="text" id="input" />
<input type="button" onclick="qpush('&pi;');" value="&pi;" />
<input type="button" onclick="show()" value="go" />
like image 531
kli Avatar asked Jul 17 '12 08:07

kli


2 Answers

Depending on what you need the it for you could do one of 3 options:

  1. use the javascript escape and unescape functions:

    var escaped = escape('π') // escaped = "%u03C0" which unescape will turn back into π

  2. If you have jQuery available it's html method might do the trick:

    $('input').val().html()

  3. This is a hack but will work: Save a copy of the value the way you want it returned on a 'data-' attribute of the input element, this will validate in html5 and won't break in other doctypes.

    document.getElementById('input').setAttribute('data-originalValue', '&pi')

like image 69
Lior Avatar answered Oct 18 '22 21:10

Lior


The value property will give you text, not HTML.

You could try getAttribute('value') but since &pi; and π are identically equivalent in HTML, a browser is entirely free to return π for that too.

Once the HTML has been converted into a DOM, there is no way to access the original HTML (short of downloading the HTML again with XHR and parsing the raw text of it yourself).

If you want the data to be "&pi;" then the HTML for it needs to be &amp;pi;.

If you want that and the rendering on the button to be π then you need:

<button type="button" value="&amp;pi;">π</button>

(Keeping in mind the various bugs that old-IE has with the button element)

That will, of course, display &pi; when you copy the value to the text input.

like image 27
Quentin Avatar answered Oct 18 '22 20:10

Quentin