2010-06-05 6 views
4

Ok! ... Je suis face à ce depuis des heures ...div contenteditable = "true"

html

<div contenteditable="true" style="width: 509px; "></div> 

<textarea cols="50" rows="10"></textarea> 
​ 

jQuery

$('div').keyup(function(){ 
    $('textarea').val($(this).text()); 
}); 
$('textarea').keyup(function(){ 
    $('div').html($(this).val()); 
})​;​ 

I Je veux que tout ce que je tape dans le < div>, ressemblerait tout comme dans le < textarea> et vice versa ... mais je suis coincé ... please see my Fiddle for what I mean...

pour la raison est que, j'utilise < div> pour remplacer < textarea> ... parce que < div> » s est scrollbar facile à personnaliser que des < textarea> ... mais si vous pouvez le voir, contenteditable div comprendrait un autre div lorsque vous appuyez sur Entrée ...

modifier ce qui se passe est,

dans le div,

I
am
folle.
mais
votre
manière
de
codant
est
pire.

mais textarea, en utilisant .html() dans div

I<div>am</div><div>crazy.</div><div>but</div><div>your</div><div>way</div><div>of</div><div>coding</div><div>is</div><div>worst.</div> 

.text() est comme ce

Je suis fou. mais votre façon de coder est pire.

et vraiment, je ne veux pas que ...

+1

On dirait que ça marche dans jsfiddle. Vous tapez dans un domaine et ne pas voir l'autre changement? –

+0

ce que je veux dire, est-ce que j'ai besoin du retour de chariot 'enter' .. ligne break ou quelque chose .... – Reigel

+0

vous ne pouvez pas transférer un retour chariot sans logique particulière qui détecte si la touche enfoncée est la touche d'entrée, puis insère un retour chariot par programme: \ – Jason

Répondre

3

Il serait plus facile d'utiliser la fonction de nl2br phpjs.org: http://phpjs.org/functions/nl2br:480


EDIT (travail entièrement - testé)

Je l'ai testé cela sur votre violon et cela a fonctionné:

$('div').keyup(function(){ 
    $('textarea').val($(this).html().replace(/<br>/g, '\n')); 
    //$('textarea').val($(this).html()) // also not working as expected 
}); 
$('textarea').keyup(function(){ 
    $('div').html(nl2br($(this).val(), 0)) 
}); 

function nl2br (str, is_xhtml) { 
    // Converts newlines to HTML line breaks 
    // 
    // version: 1004.2314 
    // discuss at: http://phpjs.org/functions/nl2br // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + improved by: Philip Peterson 
    // + improved by: Onno Marsman 
    // + improved by: Atli Þór 
    // + bugfixed by: Onno Marsman // +  input by: Brett Zamir (http://brett-zamir.me) 
    // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
    // + improved by: Brett Zamir (http://brett-zamir.me) 
    // + improved by: Maximusya 
    // *  example 1: nl2br('Kevin\nvan\nZonneveld'); // *  returns 1: 'Kevin\nvan\nZonneveld' 
    // *  example 2: nl2br("\nOne\nTwo\n\nThree\n", false); 
    // *  returns 2: '<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n' 
    // *  example 3: nl2br("\nOne\nTwo\n\nThree\n", true); 
    // *  returns 3: '\nOne\nTwo\n\nThree\n'  
    var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '' : '<br>'; 

    return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2'); 
} 
+1

je crois qu'il veut dire cette nouvelle ligne les caractères ne sont pas transférés, pas qu'il veut le texte transféré sur entrer. –

+0

Oui! @nathan ... Enfin, quelqu'un est avec moi ... lol! ..;) – Reigel

+0

@reigel, tu sais, j'essaie;) –

1

Ce code fonctionne dans Firefox:

$(document).ready(function(){ 
    $('div').keydown(function(){ 
    $('textarea').val($(this).html().replace(/<br>/g,"\n")); 
    }); 

    $('textarea').keydown(function(){ 
    $('div').html($(this).val().replace(/\n/g,"<br>")); 
    }) 
}); 

Ensuite, si vous utilisez Opera, le navigateur fait des sauts de ligne comme <p>....</p>. IE, que Reigel utilise probablement, ajoute probablement ces tags <div>...</div>. Il semble qu'il n'y ait pas vraiment de moyen standard pour gérer les sauts de ligne lorsque la balise DIV est contentable.

+0

quel est le point ???? – Reigel

+1

Vous ne vouliez pas quelque chose qui fonctionne réellement? –

+0

êtes-vous avec moi? ... vous venez de poster mes codes ... quel est le diff? – Reigel

0

essayez peut-être de regarder this question peut-être?situation légèrement différente car il essaie de communiquer avec le serveur, mais je pense que la réponse devrait être similaire.

Ce code a été précédemment posté par Gert G, mais il semble avoir disparu. le code ci-dessous semble fonctionner parfaitement, alors rep pour Gert G sur celui-ci.

$('div').keydown(function(){ 
    $('textarea').val($(this).html()); 
    }); 

    $('textarea').keydown(function(){ 
    $('div').html($(this).val().replace(/\n/g,"<br />")); 
    }) 
+0

ne fonctionne pas parfaitement ... transferts retours chariot de txtarea à div, mais pas l'inverse – Jason

+0

s'il vous plaît voir mon edit ci-dessus ... – Reigel

+0

Merci pour les tests c'est Nathan. Cela a fonctionné (bien, à l'exception que je n'avais pas fait la partie div du code quand vous avez attrapé le code :)). Vous semblez utiliser Firefox. –

0

Je pense que doit être comme ceci:

$('div').keyup(function(e){ 
    $('textarea').val($(this).text().replace('<br>',/\r\n/ig)); 
}); 
$('textarea').keyup(function(e){ 
     $('div').html($(this).val().replace(/\r\n/ig, '<br>')); 
}); 
+0

ce n'est pas ... s'il vous plaît voir mon edit ci-dessus ... – Reigel

0

Vous pouvez faire deux choses:
Vous pouvez utiliser la balise nobr
Vous pouvez également ajouter l'attribut style:

<div style="display:inline;"></div> 
Questions connexes