2013-04-05 79 views
1

我想制作一个脚本,将提取我在一个定义的元素内的一切。在这个例子中,它是<u>元素。从内容textarea返回内容中的元素

HTML

<textarea cols="75" rows="25" id="textShit"><u>sd</u></textarea><br> 
    <input type="submit" name="submit" id="submit"/> 
    <div id="res"></div> 

JS

$(function(){ 
    $('#submit').on('click',function(){ 
     $('textarea:contains("u")').each(function() { 
      //$('#res').html($(this).val()+'<br>'); 
      alert($(this).val()); 
     }) 
    }); 
}); 

,当我点击提交,在<div class="res">返回什么每<u>里面我想。

如何实现这一目标?

http://jsfiddle.net/warface/Ewve8/

+2

看到作为文字区域可能只包含文本内容,我不知道你想做什么。你想分析textarea的价值还是什么? – 2013-04-05 01:20:44

+0

不,它也包含元素。所以也许有一个:包含或类似的东西,它可以扫描提交textarea并返回我什么是里面。 – Warface 2013-04-05 01:22:32

+0

我不知道你使用的是什么浏览器,但是在我的Chrome和Firefox上,它将'

    sd
'呈现为textarea内的文本字符串(我相信这是我所期望的行为)。 – 2013-04-05 01:23:31

回答

2
$(function() { 
    $('#submit').on('click', function() { 
     var val = $.trim($('textarea').val()); 
     var text = $('<div/>').html(val).find('u').text(); 
     // console.log(text); 
    }) 
}); 

http://jsfiddle.net/Ewve8/1/

更新:您可以使用map方法,并加入了返回的数组的元素:

$('#submit').on('click', function() { 
    var val = $.trim($('textarea').val()), 
     text = $('<div/>').html(val).find('u').map(function(){ 
      return $(this).text(); 
     }).get(); 

    $('.res').html(text.join('<br>')); 
}) 
+0

尼斯现在更多里面,如何返回每个内容与
分开? – Warface 2013-04-05 01:31:14

+2

嘿,我在这段时间使用了几乎相同的方法http://jsfiddle.net/Ewve8/3/ +1进行了更新。 – 2013-04-05 01:35:12

+0

地狱耶谢谢你们! – Warface 2013-04-05 01:42:48

0

你接近。首先,你没有在你的小提琴中包含jQuery库。

只需将您的textare内容加载到jQuery对象中,它就会被解析。然后你可以使用.filter('u')得到你想要的内容:

var html = $($(this).val()); 
$('#res').html(html.filter('u').html()); 

演示:http://jsfiddle.net/QhsDY/

的一个“疑难杂症”是.filter()只会返回顶级元素,因此,如果<u>嵌套它赢得没有工作。解决方法是使用.find(),但诀窍是.find()不会查看顶级元素。这样,包的内容在一个div然后使用.find()

var html = $('<div/>').html($(this).val()); 
$('#res').html(html.find('u').html()); 

演示:http://jsfiddle.net/QhsDY/1/

至于多个<u>元件,使用.each()

var html = $('<div/>').html($(this).val()); 

html.find('u').each(function() { 
    $('#res').append($(this).html()+'<br>'); 
}); 

演示:http://jsfiddle.net/QhsDY/2/

+0

好吧如果它们在textarea里面多于1 ?并且需要在每个结果之间进行换行 – Warface 2013-04-05 01:29:24

+0

您需要使用'.each()'迭代'.find()'结果。请参阅编辑。 – 2013-04-05 01:35:10