2016-09-09 10 views
0

Я хотел бы перевести текст из html-тегов и снова вставить результат в эти теги. Это не DOM-контент, а только строка.Как получить текст из тегов, trimm и вставить в теги снова в javascript

var string = "<div class='someClass'><b>Some very long text</b></div>" 

Wanted результат f.e .:

var string = "<div class='someClass'><b>Some very lon</b></div>" 

я нашел библиотеку striptags, но это только избавляется от тегов, но я хочу, чтобы держать их.

Если у вас есть какие-либо решения, пожалуйста, дайте мне знать :)

UPDATE:

Спасибо всем вам за советы. Есть несколько вещей, которые можно добавить от меня: 1. У меня никогда нет информации о тэгах html, потому что она появилась в текстовом редакторе, и мне нужно какое-то регулярное выражение. 2. В моей работе нет jQuery, это своего рода «зло»: P. 3. Я использую среагировать, поэтому любое использование «документ» или «окно» является нежелательным здесь :(.

+0

Если вы считаете, что используете библиотеку, почему бы не использовать jquery? и используйте метод $ .html(): http://api.jquery.com/html/ –

ответ

0

Если это строка, и вы хотите обрезать некоторую часть текста. вы можете использовать функцию подстроки/срезов JavaScript.

для получения дополнительной Другой крупный, вы можете обратиться ниже ссылки

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

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

0

Если структура точно, как вы показали <div class='someClass'><b>Some very long text</b></div>, вы могли бы сделать это с регулярным выражением, чтобы найти текст, и в изменении функции его, как вам нравится, сократить (SUBSTR)/подрезать/...:

var longText ="<div class='someClass'><b>Some very long text</b></div>"; 
 

 
const MAX_LENGTH = 13; 
 

 
// regex expression matches the structure given 
 
var shortText = longText.replace(/(<div[^>]+><b>)([^<]+)(?=<\/b><\/div>)/gi, function(m1,m2,m3){ 
 
// m2 matches "<div class='someClass'><b>" 
 
// m3 matches "Some very long" 
 
return m2 + m3.substr(0, MAX_LENGTH).trim(); 
 
}) 
 
console.info(shortText)

Вот некоторые документы функции замены https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

А «прохладнее» Альтернатива:
Если вы передаете HTML-элемент, который должен быть изменен, чтобы этой короткой функции checkChildren, все для детей Textnodes будет изменен , trim, substr ... (это немного излишним, проверяя каждый узел, если вы знаете конечную структуру, но я просто хотел, чтобы проверить его):

var elem = document.getElementById("test"); 
 
//define the max length of text nodes 
 
const MAX_LENGTH = 13; 
 

 
checkChildren(elem); 
 

 
// check all children from parent element an limit the size of textNodes 
 
function checkChildren(parent){ 
 
    for(var i=0; i<parent.childNodes.length;i++){ 
 
    var child = parent.childNodes[i]; 
 
    switch(child.nodeType){ 
 
     case Node.ELEMENT_NODE: 
 
     // recursive call 
 
     checkChildren(child); 
 
     break; 
 
     case Node.TEXT_NODE: 
 
     // modify textNode (Shorten and trim) 
 
     child.nodeValue = child.nodeValue.substr(0,MAX_LENGTH).trim(); 
 
     break; 
 
    } 
 
    } 
 
}
<div id="test" class='someClass'><b>Some very long text</b></div>

0

Вы можете использовать скрытый тег, в котором будете манипулировать строкой.Что-то вроде <div id="tags-modifier" ></div> , а затем, как JQuery, как

var string = "<div class='someClass'><b>Some very long text</b><b>Test2213213213213</b></div>" 
$("#tags-modifier").html(string); 
var part= 5; 
$.each($('#tags-modifier *:not(:has("*"))'), function(){ 
    mytext=$(this).html() 
    $(this).html(mytext.substring(0, part)) 
}) 
string = $("#tags-modifier").html(); 

Это работает, даже если есть несколько братьев и сестер

Fiddle here

0

Вы можете использовать $ .parseHTML, чтобы преобразовать эту строку в йот дерева. Получите узел <b> из этого дерева и измените текст с помощью substr.

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

  • Нет связанных вопросов^_^