2014-02-19 4 views
0

Я хочу, чтобы пользователь мог ввести фразу из основного текста, а затем заменить этот текст на то, что пожелает пользователь. Я считаю, что .replaceWith() будет лучше всего, однако я не совсем уверен, как его реализовать.Использование jQuery replaceWith() для замены выделенного текста на ввод текста

Вот мой HTML для области ввода.

<h2>Replace</h2> 
<table> 
    <tr> 
     <td>Original:</td> 
     <td> 
      <input id="original" type="text" /> 
     </td> 
    </tr> 
    <tr> 
     <td>New Text:</td> 
     <td> 
      <input id="newtext" type="text" /> 
     </td> 
    </tr> 
    <tr> 
     <td colspan="2"> 
      <input id="replace" type="button" name="save" value="Replace" /> 
     </td> 
    </tr> 
</table> 
</div> 

, и я хотел бы, чтобы пользователь мог ввести слово или фразу из #text (тел), а затем ввести в новой текстовой части ввода, какой текст они хотели бы заменить оригинальный текст с.

Единственное, с чем я столкнулся, состоит в том, что пользователь может ввести любое слово или фразу из «оригинального» текста и заменить «оригинальный» текст на что угодно.

Я думал, что-то вроде

$("table").click(function(){ 
    $("#text").replaceWith("anything the user wants"); 
}); 

Спасибо!

ВСЕ

<!DOCTYPE html> 
<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> 
</script> 
<script> 
$(document).ready(function(){ 
    $("#red").click(function(){ 
    $("#text").css("color","red"); 
    }); 
    $("#blue").click(function(){ 
    $("#text").css("color","blue"); 
}); 
    $("#green").click(function(){ 
    $("#text").css("color","green"); 
}); 

    $("#times_new_roman").click(function(){ 
    $("#text").css("font-family","'Times New Roman'"); 
}); 
    $("#courier").click(function(){ 
    $("#text").css("font-family","courier"); 
}); 

    $("#comic_sans").click(function(){ 
    $("#text").css("font-family","'Comic Sans MS'"); 
}); 
    $("#arial").click(function(){ 
    $("#text").css("font-family","Arial"); 
}); 
    $('input[name="decoration"]').change(function(){ 
     if ($(this).val() == 'bold'){ 
      if ($(this).is(':checked')) $("#text").css('font-weight', "bold"); 
      else $("#text").css('font-weight', "normal"); 
     } 
     else if ($(this).val() == 'italic'){ 
      if ($(this).is(':checked')) $("#text").css('font-style', "italic"); 
      else $("#text").css('font-style', "normal"); 
     } 

    }); 
     $('input[name="font"]').bind('keypress', function (event) { 
    var regex = new RegExp("[0-9]"); 
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode); 
    if (!regex.test(key)) { 
     event.preventDefault(); 
     return false; 
    } 
}); 

$("#up").click(function() { 
    var currentSize = $("#text").css("font-size"); 
    currentSize = currentSize.replace(/[^\d.]/g, ""); 
    currentSize++; 
    if(currentSize < 10 || currentSize > 80){ 
     alert("Font-size between 10 and 80 only!"); 
    } 
    else { 
     $("#text").css("font-size", "" + currentSize + "px"); 
    } 
}); 

$("#down").click(function() { 
    var currentSize = $("#text").css("font-size"); 
    currentSize = currentSize.replace(/[^\d.]/g, ""); 
    currentSize--; 
    if(currentSize < 10 || currentSize > 80){ 
     alert("Font-size between 10 and 80 only!"); 
    } 
    else { 
     $("#text").css("font-size", "" + currentSize + "px"); 
    } 

}); 

$('input[name="font"]').on("keyup change", function() { 
    var newSize = $(this).val(); 
    if(newSize < 10 || newSize > 80){ 
     alert("Font-size between 10 and 80 only!"); 
    } 
    else { 
     $("#text").css("font-size", "" + newSize + "px"); 
    } 
}); 

    }); 

</script> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>INFO 2300 - HW1</title> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script type="text/javascript" src="script.js"></script> 
    <link rel="stylesheet" type="text/css" href="stylesheet.css" title="StyleSheet" /> 
</head> 

<body> 
    <div id="wrapper"> 
     <h1>Super Cool Javascript Text Editor</h1> 
     <form id="controlForm" class="controls" action="index.php" method="post" onsubmit="return false;"> 
      <div id="color"> 
       <h2 class="test2">Font Color</h2> 
       <label for="red">Red</label> 
       <input type="radio" name="color" value="Red" id="red" /><br /> 
       <label for="blue">Blue</label> 
       <input type="radio" name="color" value="Blue" id="blue" /><br /> 
       <label for="green">Green</label> 
       <input type="radio" name="color" value="Green" id="green" /><br /> 
      </div> 

      <div> 
       <h2>Font Family</h2> 
       <!-- Giving specific names, then generic ones, is useful for font families 
        because not everyone has every font. --> 
       <label for="courier">Courier</label> 
       <input type="radio" name="family" value="courier,monospace" id="courier" /><br /> 
       <label for="times_new_roman">Times New Roman</label> 
       <input type="radio" name="family" value="times new roman,serif" id="times_new_roman" /><br /> 
       <label for="arial">Arial</label> 
       <input type="radio" name="family" value="arial,sans-serif" id="arial" /><br /> 
       <label for="comic_sans">Comic Sans MS</label> 
       <input type="radio" name="family" value="comic sans ms, sans-serif" id="comic_sans" /><br /> 
      </div> 
      <div id="font"> 
       <h2>Font Size</h2> 
       <input name="font" type="text" value="15"/>px 
       <br /><span id="sizeWarning"></span> 
      <div> 
       </div> 
       <h2>Text Decoration</h2> 
       <label for="bold">Bold</label> 
       <input type="checkbox" name="decoration" value="bold" id="bold" /><br /> 

       <!-- Added for italic --> 
       <label for="italic">Italic</label> 
       <input type="checkbox" name="decoration" value="italic" id="italic" /><br /> 
      </div> 

      <div> 
       <h2>Search Features [Already Implemented]</h2> 
       <input id="search" type="text" name="search"/> 
      </div> 

      <div> 
       <h2>Replace</h2> 
       <table> 
       <tr><td>Original: </td><td><input id="original" type="text" /></td></tr> 
       <tr><td>New Text: </td><td><input id="newtext" type="text" /></td></tr> 
       <tr><td colspan="2"><input id="replace" type="button" name="save" value="Replace" /></td></tr> 
       </table> 
      </div> 

     </form> 


     <form id="myform" class="test" action="saveFile.php" method="post"> 
     <div id="saveResult" class="saveResult"> 
      <input name="hiddentext" type="hidden" /> 
      <input name="settings" type="hidden" /> 
      <input name="savebutton" type="submit" value="Save file" /> 
     </div> 
     </form> 

     <div id="text"> 
     <?php 
      //reads in the file 
      $file = file("lorem.txt"); 
      foreach($file as $line){ 
       echo "<p>".$line."</p>"; 
      } 
     ?> 

     </div> 
    </div> 
</body> 
</html> 
+0

Что вы пытаетесь достичь? Если я правильно понял, вы не хотите, чтобы пользователь мог редактировать первое поле ввода? Вы можете использовать свойство «readonly». Также вы можете использовать элемент '# text'? –

+0

см., Где вход #original есть? ну на моей странице у меня есть абзац текста.Я хочу, чтобы пользователь вводил фразу или слово из этого абзаца текста (#text), а затем мог заменить это слово или фразу, чем бы они ни вводились в поле ввода # заменить. Я выложу все свои html/js, чтобы вы могли видеть. его вид много tho – user3321452

+0

'replaceWith()' для замены объектов DOM. Вы хотите String.replace. –

ответ

1

Вы имеете в виду, как

if (!RegExp.escape) { 
    RegExp.escape = function (s) { 
     return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') 
    }; 
} 
jQuery(function() { 
    $('#replace').click(function() { 
     var text = $('#original').val(); 
     if (text) { 
      var regex = new RegExp(RegExp.escape(text), 'g'); 
      $('h2').text(function (i, text) { 
       return text.replace(regex, $('#newtext').val()) 
      }) 
     } 
    }) 
}) 

Демо: Fiddle

Вы можете использовать простое регулярное выражение для замены искомой строки в целевом

+0

Я думаю, что это отвечает на вопрос. Вы можете использовать sugarJS для сохранения необходимости писать свою собственную функцию эвакуации (и сто других вещей, которые должен иметь JavaScript) :-) http://sugarjs.com/api/RegExp/escape –

+0

ах спасибо. всего несколько вопросов. Если я не хочу, чтобы пользователь вводил какие-либо теги html или странные вещи, просто разрешите буквы, числа и пробелы в части $ .replace() правильно? Кроме того, где в коде вы сделали так, чтобы пользователь мог ввести что-либо в заменяемой части? Это действительно отключает меня, и я люблю знать будущие проекты. – user3321452

+0

Я думаю, вы можете разрешить пользователю вводить что-либо, чтобы заменить строку, если вы правильно дезинформируете вход, это не должно вызывать никаких проблем ... в этом случае, поскольку мы используя '.text()', чтобы заменить строку, она должна быть достаточно безопасной –

0

Вы можете просто использовать $ ('# текст') текст ('все, что вы хотите.');

+0

$ ("table"). Click (function() { $ ("# текст"). ReplaceWith («что угодно пользователю»); }); поэтому, где угодно, что вы хотите, как я могу сделать это так, чтобы все, что пользователь вводил, просто использовал $ this или? – user3321452

+0

Используйте $ ('# newtext'). Val() внутри заменить – Muthu

0

Если я понял правильно, что вы хотите сделать, это замените одно слово внутри текста div #, где каждая строка текста обернута внутри тегов <p></p>. (Это намеренное Если нет, скажите мне в комментариях, и я добавлю ответ на то, как вы держать все это в одном P теге?).

шагов, чтобы ответить на это:

  1. Получить текст элемент
  2. Выполните поиск и замену
  3. Установите новый текст на элементе #text

Для этого:

function replaceTextAtDiv(){ 
    var div_text = $("#text").text(); 
    var textToReplace = $("#original").val(); 
    var newText = $("#newtext").val(); 
    div_text.replace(textToReplace, newText); 
    $("#text").text(div_text); 

    /* OR - In One Line 

    /$("#text").text($("#text").text().replace($("#original").val(), $("#newtext").val()));*/ 
} 

Предложение Чтобы разместить весь текст на обложке <p></p>. Сделайте это так:

<?php 
    //reads in the file 
    $file = file("lorem.txt"); 
    $string = ""; 
    foreach($file as $line){ 
     $string = $string . "\n" . $line; //Take away [ . "\n" ] if it generates 2 line breaks. 
    } 
    echo "<p>".$string."</p>"; 
?> 
Смежные вопросы