JS:用 if 将 "var y = UNDEFINED" 更改为 "var y= blank space"
JS: change "var y = UNDEFINED" for "var y= blank space" with if
我有一个 table 从用户填写的文本区域生成的,但有时,单元格保持为空(没关系)。
问题是该单元格的 .innerHTML
在脚本中也是我的 var y
,当该单元格为空(因此,未定义)时,我的 var y
也变为未定义(值,而不是字符串),这使我的整个脚本失败。
下面是一个显示问题的片段:
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body><center>
</center></body>
<!--------- script that generates my table from text areas -->
<script>
function generateTable() {
$('#excel_table1').html("");
var n=1;
var rows=[];
var lng=0;
var maxligne=0;
$('textarea').each(function(){
var data = $(this).val();
if (data !=''){
var rowData = data.split("\n");
rows[n] = rowData;
lng = rowData.length;
if(lng > maxligne)
{
maxligne=lng
}
n++;
}
}
)
var table = $('<table />');
k=0;
while (k < maxligne) {
var row = $('<tr />');
for(var i = 1; i < rows.length; i++)
{
var singleRow = rows[i];
if(singleRow[k]!= undefined){
row.append('<td>'+singleRow[k]+'</td>')
} else {
row.append('<td></td>')
}
}
table.append(row);
k++;
}
$('#excel_table1').append(table);
}
</script>
<textarea placeholder="data 2 Here" name="data1" style="width:100px;height:40px;"></textarea>
<textarea placeholder="data 2 Here" name="data2" style="width:200px;height:40px;"></textarea>
<textarea placeholder="fild not required" name="data3" style="width:200px;height:40px;"></textarea>
<br>
<input id=bouton1 type="button" onclick="javascript:generateTable()" value="GenerateTable"/>
<div id="excel_table1"></div>
<!--------- script that get the data from cells to show it in <H2> -->
<script type="text/javascript">
function buttonTEST()
{
$('#displayCell').html("");
var x = document.getElementById('excel_table1').getElementsByTagName('tr')[0].cells[1].innerHTML;
var y = document.getElementById('excel_table1').getElementsByTagName('tr')[0].cells[2].innerHTML;
if (y === undefined) {
y = " ";
}
document.getElementById('displayCell').innerHTML = x +" "+ y;
}
</script>
<br/><br/>
<h2 id="displayCell"></h2>
<br/><br/>
<input id="Button2" type="button" onclick="buttonTEST()" value="TEST ME"/>
如您所见,如果您生成仅包含 to 列的 table(有时 supposed/needs 会发生),我们会从控制台收到此错误,因为我们正在尝试获取"innerHTML" 来自未定义的:
index.html:120 Uncaught TypeError: Cannot read property 'innerHTML' of undefined
一点说明:当那个单元格是=undefined
时,我需要它保持undefined
,我只想改变我的var y
也变得未定义的事实。
所以我认为将 var y
的值(而不是那个单元格的值,否则,第三列,应该是空的,会因为一个空白 space 而被创建)到一个空白space 可以解决问题,但我好像没写对(写得对)。
有什么想法吗?
尝试
var x = document.getElementById('excel_table1').rows[0].cells[0].innerHTML;
var y = document.getElementById('excel_table1').rows[0].cells[1].innerHTML;
使用行而不是 getElementsByTagName
更干净。
另请注意,单元格的索引从零开始而不是 1,您的第一行中可能只有 2 个单元格,但 .cells[2].innerHTML
尝试获取不存在的第三个单元格的 innerHTML。
正如其他人所指出的,您已经在使用 jQuery,因此获取单元格内容的最简单方法是使用 css select 或查找单元格使用 $
函数,然后调用 .html()
获取内容。将您当前的代码直接转换为这种方法可以是:
var x = $('#excel_table1 tr:nth-child(1) td:nth-child(2)').html();
var y = $('#excel_table1 tr:nth-child(1) td:nth-child(3)').html();
它的工作方式使得 $
函数 return 是一个 jQuery 对象,它本质上是一组元素,可能是空的。大多数 jQuery 函数被设计为在空集上调用时优雅地失败。例如,html
在空集上调用时将 return 未定义,但不会失败。
请注意,使用 select 或更高版本不是很稳健,因为它显然对单元格的放置很敏感。将 class 属性分配给描述其内容的单元格,然后在其上分配 select 会更易于维护,例如像
var name = $("#excel_table1 tr:nth-child(1) td.name").html()
所以这是对我有用的答案:
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body><center>
</center></body>
<!--------- script that generates my table from text areas -->
<script>
function generateTable() {
$('#excel_table1').html("");
var n=1;
var rows=[];
var lng=0;
var maxligne=0;
$('textarea').each(function(){
var data = $(this).val();
if (data !=''){
var rowData = data.split("\n");
rows[n] = rowData;
lng = rowData.length;
if(lng > maxligne)
{
maxligne=lng
}
n++;
}
}
)
var table = $('<table />');
k=0;
while (k < maxligne) {
var row = $('<tr />');
for(var i = 1; i < rows.length; i++)
{
var singleRow = rows[i];
if(singleRow[k]!= undefined){
row.append('<td>'+singleRow[k]+'</td>')
} else {
row.append('<td></td>')
}
}
table.append(row);
k++;
}
$('#excel_table1').append(table);
}
</script>
<textarea placeholder="data 2 Here" name="data1" style="width:100px;height:40px;"></textarea>
<textarea placeholder="data 2 Here" name="data2" style="width:200px;height:40px;"></textarea>
<textarea placeholder="fild not required" name="data3" style="width:200px;height:40px;"></textarea>
<br>
<input id=bouton1 type="button" onclick="javascript:generateTable()" value="GenerateTable"/>
<div id="excel_table1"></div>
<!--------- script that get the data from cells to show it in <H2> -->
<script type="text/javascript">
function buttonTEST()
{
$('#displayCell').html("");
var x = $('#excel_table1 tr:nth-child(1) td:nth-child(2)').html();
var y = $('#excel_table1 tr:nth-child(1) td:nth-child(3)').html();
if (y ===undefined)
{document.getElementById('displayCell').innerHTML = x ;}
else
{document.getElementById('displayCell').innerHTML = x +" "+ y;}
}
</script>
<br/><br/>
<h2 id="displayCell"></h2>
<br/><br/>
<input id="Button2" type="button" onclick="buttonTEST()" value="TEST ME"/>
我有一个 table 从用户填写的文本区域生成的,但有时,单元格保持为空(没关系)。
问题是该单元格的 .innerHTML
在脚本中也是我的 var y
,当该单元格为空(因此,未定义)时,我的 var y
也变为未定义(值,而不是字符串),这使我的整个脚本失败。
下面是一个显示问题的片段:
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body><center>
</center></body>
<!--------- script that generates my table from text areas -->
<script>
function generateTable() {
$('#excel_table1').html("");
var n=1;
var rows=[];
var lng=0;
var maxligne=0;
$('textarea').each(function(){
var data = $(this).val();
if (data !=''){
var rowData = data.split("\n");
rows[n] = rowData;
lng = rowData.length;
if(lng > maxligne)
{
maxligne=lng
}
n++;
}
}
)
var table = $('<table />');
k=0;
while (k < maxligne) {
var row = $('<tr />');
for(var i = 1; i < rows.length; i++)
{
var singleRow = rows[i];
if(singleRow[k]!= undefined){
row.append('<td>'+singleRow[k]+'</td>')
} else {
row.append('<td></td>')
}
}
table.append(row);
k++;
}
$('#excel_table1').append(table);
}
</script>
<textarea placeholder="data 2 Here" name="data1" style="width:100px;height:40px;"></textarea>
<textarea placeholder="data 2 Here" name="data2" style="width:200px;height:40px;"></textarea>
<textarea placeholder="fild not required" name="data3" style="width:200px;height:40px;"></textarea>
<br>
<input id=bouton1 type="button" onclick="javascript:generateTable()" value="GenerateTable"/>
<div id="excel_table1"></div>
<!--------- script that get the data from cells to show it in <H2> -->
<script type="text/javascript">
function buttonTEST()
{
$('#displayCell').html("");
var x = document.getElementById('excel_table1').getElementsByTagName('tr')[0].cells[1].innerHTML;
var y = document.getElementById('excel_table1').getElementsByTagName('tr')[0].cells[2].innerHTML;
if (y === undefined) {
y = " ";
}
document.getElementById('displayCell').innerHTML = x +" "+ y;
}
</script>
<br/><br/>
<h2 id="displayCell"></h2>
<br/><br/>
<input id="Button2" type="button" onclick="buttonTEST()" value="TEST ME"/>
如您所见,如果您生成仅包含 to 列的 table(有时 supposed/needs 会发生),我们会从控制台收到此错误,因为我们正在尝试获取"innerHTML" 来自未定义的:
index.html:120 Uncaught TypeError: Cannot read property 'innerHTML' of undefined
一点说明:当那个单元格是=undefined
时,我需要它保持undefined
,我只想改变我的var y
也变得未定义的事实。
所以我认为将 var y
的值(而不是那个单元格的值,否则,第三列,应该是空的,会因为一个空白 space 而被创建)到一个空白space 可以解决问题,但我好像没写对(写得对)。
有什么想法吗?
尝试
var x = document.getElementById('excel_table1').rows[0].cells[0].innerHTML;
var y = document.getElementById('excel_table1').rows[0].cells[1].innerHTML;
使用行而不是 getElementsByTagName
更干净。
另请注意,单元格的索引从零开始而不是 1,您的第一行中可能只有 2 个单元格,但 .cells[2].innerHTML
尝试获取不存在的第三个单元格的 innerHTML。
正如其他人所指出的,您已经在使用 jQuery,因此获取单元格内容的最简单方法是使用 css select 或查找单元格使用 $
函数,然后调用 .html()
获取内容。将您当前的代码直接转换为这种方法可以是:
var x = $('#excel_table1 tr:nth-child(1) td:nth-child(2)').html();
var y = $('#excel_table1 tr:nth-child(1) td:nth-child(3)').html();
它的工作方式使得 $
函数 return 是一个 jQuery 对象,它本质上是一组元素,可能是空的。大多数 jQuery 函数被设计为在空集上调用时优雅地失败。例如,html
在空集上调用时将 return 未定义,但不会失败。
请注意,使用 select 或更高版本不是很稳健,因为它显然对单元格的放置很敏感。将 class 属性分配给描述其内容的单元格,然后在其上分配 select 会更易于维护,例如像
var name = $("#excel_table1 tr:nth-child(1) td.name").html()
所以这是对我有用的答案:
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body><center>
</center></body>
<!--------- script that generates my table from text areas -->
<script>
function generateTable() {
$('#excel_table1').html("");
var n=1;
var rows=[];
var lng=0;
var maxligne=0;
$('textarea').each(function(){
var data = $(this).val();
if (data !=''){
var rowData = data.split("\n");
rows[n] = rowData;
lng = rowData.length;
if(lng > maxligne)
{
maxligne=lng
}
n++;
}
}
)
var table = $('<table />');
k=0;
while (k < maxligne) {
var row = $('<tr />');
for(var i = 1; i < rows.length; i++)
{
var singleRow = rows[i];
if(singleRow[k]!= undefined){
row.append('<td>'+singleRow[k]+'</td>')
} else {
row.append('<td></td>')
}
}
table.append(row);
k++;
}
$('#excel_table1').append(table);
}
</script>
<textarea placeholder="data 2 Here" name="data1" style="width:100px;height:40px;"></textarea>
<textarea placeholder="data 2 Here" name="data2" style="width:200px;height:40px;"></textarea>
<textarea placeholder="fild not required" name="data3" style="width:200px;height:40px;"></textarea>
<br>
<input id=bouton1 type="button" onclick="javascript:generateTable()" value="GenerateTable"/>
<div id="excel_table1"></div>
<!--------- script that get the data from cells to show it in <H2> -->
<script type="text/javascript">
function buttonTEST()
{
$('#displayCell').html("");
var x = $('#excel_table1 tr:nth-child(1) td:nth-child(2)').html();
var y = $('#excel_table1 tr:nth-child(1) td:nth-child(3)').html();
if (y ===undefined)
{document.getElementById('displayCell').innerHTML = x ;}
else
{document.getElementById('displayCell').innerHTML = x +" "+ y;}
}
</script>
<br/><br/>
<h2 id="displayCell"></h2>
<br/><br/>
<input id="Button2" type="button" onclick="buttonTEST()" value="TEST ME"/>