[英]How to store each paragraph into an javascript array when onclick event occurs?
[英]Onclick event on a paragraph is triggered under the paragraph
我希望在单击段落时用textarea标记替换该段落,该textarea应该包含该段落中的文本:
<div id="right"><p><pre><?php echo $descri; ?></pre></p></div>
jQuery脚本:
$(function(){
$('#right').on('click', 'p', function(){
var $p = $(this);
var old = $p.html();
if(/<textarea rows="4" cols="40" id="descri" name="descri"/.test(old))
return;
$p.html('<textarea rows="4" cols="40" id="descri" name="descri" value="' + old + '"/>')
.find('textarea')
.focus()
.on('blur', function(){
var value = this.value;
$.post('listener_updates.php', {description: value})
.done(function(){
$p.html(value);
})
.fail(function(){
$p.html(old);
alert('Could not update title');
});
});
});
});
现在,当我单击段落文本时,什么都没有发生,但是当我在段落文本下单击一点时,该文本区域就会出现并且为空。 谢谢您的帮助
这是因为您不能在p
元素内放置pre
元素 ,因此浏览器会更正无效的DOM。 p
的内容模型是短语内容 ,但是pre
在短语内容中无效,只有流内容 。
当您将此内容提供给Chrome浏览器时:
<div class="right"><p><pre>This is the text</pre></p></div>
...实际上创建了这个DOM:
<div class"right"><p></p><pre>This is the text</pre><p></p></div>
请注意, pre
不再位于任何p
。
如果要使用pre
,只需单独使用pre
(不使用p
)。 pre
就像p
一样:它们都有相同的内容模型,都在相同的地方有效,并且都display: block
默认情况下为display: block
。
或者,如果你唯一的目标就是不要有换行等这样的,在现代浏览器,你可以摆脱的pre
(保持p
或使用div
如果语义p
是不恰当的),并使用CSS white-space
属性 (例如, white-space: pre
)代替。
在下面重新发表您的评论:
但我无法在pre标记内获取文本以在textarea上显示
只需将pre
的contents()
放入textarea
,将textarea
放入所需的DOM中,然后删除或隐藏pre
。 例如,将其删除: 实时示例
$(".right").on("click", "pre", function() {
var $pre = $(this);
var $textarea = $("<textarea>");
$textarea.append($pre.contents());
$pre.replaceWith($textarea);
return false;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.