如何在javascript中获取.text()方法中的完整字符串?

如何在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>

我正在研究javascript和html。我有表格数据。单击每个td值后,我运行一个javascript函数,该函数获取td的文本值,并将其作为值放入动态生成的输入标记中。当我点击td文本时,为什么我的值中没有完整的字符串

我尝试使用内部Html并尝试设置值

 <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',
})