如何在javascript中获取.text()方法中的完整字符串?
我正在研究javascript和html。我有表格数据。单击每个td值后,我运行一个javascript函数,该函数获取td的文本值,并将其作为值放入动态生成的输入标记中。当我点击td文本时,为什么我的值中没有完整的字符串 我尝试使用内部Html并尝试设置值如何在javascript中获取.text()方法中的完整字符串?,javascript,html,Javascript,Html,我正在研究javascript和html。我有表格数据。单击每个td值后,我运行一个javascript函数,该函数获取td的文本值,并将其作为值放入动态生成的输入标记中。当我点击td文本时,为什么我的值中没有完整的字符串 我尝试使用内部Html并尝试设置值 <tr class="success"> <td id="name" ><a style="cursor: pointer;">Ravi Sharma</a></td>
<tr class="success">
<td id="name" ><a style="cursor: pointer;">Ravi Sharma</a></td>
</tr>
拉维·夏尔马
$('#名称a')。单击(函数(){
var name=$(this.text();
var html='';
});
期望:
实际:
HTML元素属性的值周围需要加引号。在进行连接时,单引号会被插值。所以它假设第一个单词是唯一的值
而不是:
var html=''代码>
尝试:
var html=''代码>
@ray toal关于输入的净化和防范XSS。刚刚在
标记中添加了一个ID(因为它是内容文本的父项),并更改了一点JavaScript逻辑,希望它能帮助:
var text=document.getElementById(“aName”).innerHTML;
var output='下面的名称是事件的结果,而不是原始状态 ",;
document.getElementById(“aName”).addEventListener(“单击”,函数(){
document.body.innerHTML=输出+文本;
});代码>
拉维·夏尔马
您正在混淆单引号和双引号。我建议使用backticks
,如下所示:
var name='Ravi Sharma';
var html=`;
log(html)代码>复制了您的代码并得到了答案。
1.将字符串初始化从“”更改为“”,以便能够插入变量。
2.在您的期望中,您要求使用“>”,但代码中包含“/>”,如果需要,可以对其进行更改。
3.这是你的解决方案
$('#name a').click(function() {
var name = $(this).text();
var html = `<input type="text" name="memberlist" value="${name}"/> `;
堆栈溢出
拉维·夏尔马
浏览器忽略
、
和
标记以及相应的结束标记。HTML规范中没有规定这一点,因为它们没有定义语法错误文档的解析。然而,在HTML5草案中,有一个描述定义了浏览器的行为,其方式与浏览器的实际功能相对应:
这意味着您不能编写包含(比如)表元素之外的元素的HTML文档。浏览器中的HTML解析器并不构建这样的文档树。(但是,您可以使用客户端脚本动态构造这样的文档。)
$('#name')。单击(函数(){
警报(“asdfsdf”);
var name=$(this.text();
var html='';
$(“#测试”).text(html);
});代码>
拉维·夏尔马
其他答案会告诉你为什么会得到这样的结果。试图通过添加引号来解决问题很有诱惑力,例如
var html = '<input type="text" name="memberlist" value="'+ name +'"/> ';
这将扩展到
value="Ravi O"Brien"
您的输入框将只包含“Ravi O”
当然可以使用反斜杠和插值来解决这个问题,或者甚至可以尝试用反斜杠转义双引号字符。这样做容易出错innerHTML
无论如何都是有问题的,而且是一个很大的安全问题。最好自己创建HTML元素。您正在使用jQuery,因此创建输入元素的正确方法是:
$("<input/>", {
type: 'text',
value: name,
name: 'memberList',
})
$(“”{
键入:“文本”,
值:name,
名称:“成员列表”,
})
使用innerHTML
有一些安全的方法,但我认为应该(始终)避免它。这是一个很好的知识。谢谢@axecopfire,我试过了,但没有收到文本。它只需要${name}而不是RaviSharma@RaviSharma我很肯定它能用。我编辑了我的答案并添加了一个代码片段。检查一下。你在开头和结尾使用了`
吗?这无疑是一个很好的解释。但是如果我有一个名称数组,并想用这些名称创建一个列表呢?创建一个元素并在一个循环中重复添加它不会显得太匆忙吗?一点也不……我个人会发现它更清晰。您正在用JavaScript构建对象,并在JavaScript中调用函数,而不是到处乱搞字符串片段并将它们组装在一起,并且总是非常小心引号在哪里,以及哪些子字符串需要转义。您应该能够找到一种方法来生成一大堆数据来自数组的HTML元素。试试看!无论是处理字符串还是HTML元素构造函数,都需要使用循环和数组函数,如forEach
和map
。继续努力,必要时进行重构。:)
name = 'Ravi O"Brien'
document.body.innerHTML = '<input type="text" name="memberlist" value="'+ name +'"/> '
value="Ravi O"Brien"
$("<input/>", {
type: 'text',
value: name,
name: 'memberList',
})