我有一张桌子和一张清单。我希望用户单击表中的项目,并将单元格中的文本添加到列表中。
function history_buff(obj){
var elList = Document.getElementById("user_history");
//alert("Trying to add item " + obj);
var element = Document.getElementById(str(obj))
var text = element.innerText || element.textContent;
var user_item = element.innerHTML = text;
alert("Trying to add: " + user_item)
var li = document.createElement("li");
li.innerHTML = user_item.value;
elList.appendChild(user_item);
}
function welcome(){
alert("Welcome home!");
}
这是HTML:
<div class="block" id="one">
<table id="name_table">
<tr>
<th>Name</th>
<th>Age</th>
<th>Job</th>
</tr>
<tr id="name_1">
<td><a onclick="history_buff();" href="static\text_files\alex.txt">Alex</a></td>
<td onclick="welcome();">12</td>
<td>Analyst</td>
</tr>
<tr id="name_2">
<td><a href="static\text_files\bill.txt">Bill</a></td>
<td>54</td>
<td>Car Salesman</td>
</tr>
<tr id="name_3">
<td><a id="item_3" href="static\text_files\Rodrigo.txt">Rodrigo</a></td>
<td>7</td>
<td id="job_3" onclick="history_buff(this.id)">Merchant</td>
</tr>
</table>
</div>
<div class="block" id="two">
<h2>History</h2>
<ul id="user_history">
<li>Nothing</li>
<li>Something</li>
</ul>
</div>
我尝试了很多与此相似的方法,但似乎无法得到它。
答案 0 :(得分:1)
首先,为行提供ID是一个坏习惯,因为表中的记录可以动态生成, 其次,你的代码没有运行的一个可能原因是在定义
时 function history_buff(obj){
... do something
}
但是在调用函数时,您没有将obj作为参数传递
ie <td><a onclick="history_buff();" href="static\text_files\alex.txt">Alex</a></td>
最后,
`var element = Document.getElementById(str(obj)),
为什么不尝试
var element = Document.getElementById(${obj}
)`
我希望这有帮助
答案 1 :(得分:1)
您的功能有一些错误。这是一个固定的工作版本:
function history_buff(obj) {
var elList = document.getElementById("user_history");
//alert("Trying to add item " + obj);
var element = document.getElementById(obj)
var text = element.textContent;
var user_item = text;
alert("Trying to add: " + user_item);
var li = document.createElement("li");
li.innerHTML = user_item;
elList.appendChild(li);
}
function welcome() {
alert("Welcome home!");
}
&#13;
<div class="block" id="one">
<table id="name_table">
<tr>
<th>Name</th>
<th>Age</th>
<th>Job</th>
</tr>
<tr id="name_1">
<td><a href="static\text_files\alex.txt">Alex</a></td>
<td onclick="welcome();">12</td>
<td id="job_1" onclick="history_buff(this.id)">Analyst</td>
</tr>
<tr id="name_2">
<td><a href="static\text_files\bill.txt">Bill</a></td>
<td>54</td>
<td id="job_2" onclick="history_buff(this.id)">Car Salesman</td>
</tr>
<tr id="name_3">
<td><a id="item_3" href="static\text_files\Rodrigo.txt">Rodrigo</a></td>
<td>7</td>
<td id="job_3" onclick="history_buff(this.id)">Merchant</td>
</tr>
</table>
</div>
<div class="block" id="two">
<h2>History</h2>
<ul id="user_history">
<li>Nothing</li>
<li>Something</li>
</ul>
</div>
&#13;
但这不是最好的做事方式。
答案 2 :(得分:1)
addEventListener
绑定事件。value
的属性,因此,此user_item.value
无法正常工作。li
。此方法使用事件对象中的函数preventDefault
来阻止链接的默认行为,这样您就可以看到添加到父元素user_history
的元素。
Array.prototype.forEach.call(document.querySelectorAll('td a'), function(a) {
a.addEventListener('click', history_buff)
});
function history_buff(event) {
event.preventDefault();
var elList = document.getElementById("user_history");
var text = this.innerText || element.textContent;
var user_item = this.innerHTML = text;
//console.log("Trying to add: " + user_item)
var li = document.createElement("li");
li.innerHTML = user_item;
elList.appendChild(li);
}
function welcome() {
alert("Welcome home!");
}
&#13;
<div class="block" id="one">
<table id="name_table">
<tr>
<th>Name</th>
<th>Age</th>
<th>Job</th>
</tr>
<tr id="name_1">
<td><a href="static\text_files\alex.txt">Alex</a></td>
<td onclick="welcome();">12</td>
<td>Analyst</td>
</tr>
<tr id="name_2">
<td><a href="static\text_files\bill.txt">Bill</a></td>
<td>54</td>
<td>Car Salesman</td>
</tr>
<tr id="name_3">
<td><a id="item_3" href="static\text_files\Rodrigo.txt">Rodrigo</a></td>
<td>7</td>
<td id="job_3" onclick="history_buff(this.id)">Merchant</td>
</tr>
</table>
</div>
<div class="block" id="two">
<h2>History</h2>
<ul id="user_history">
<li>Nothing</li>
<li>Something</li>
</ul>
</div>
&#13;
答案 3 :(得分:1)
尝试检查此代码段:
function history_buff(value){
$("#user_history").append('<li><a href="/user/messages"><span class="tab">'+value+'</span></a></li>');
}
function welcome(){
alert("Welcome home!");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="block" id="one">
<table id="name_table">
<tr>
<th>Name</th>
<th>Age</th>
<th>Job</th>
</tr>
<tr id="name_1">
<td><span onclick="history_buff('Alex');">Alex</span></td>
<td onclick="welcome();">12</td>
<td>Analyst</td>
</tr>
<tr id="name_2">
<td><span onclick="history_buff('Bill');">Bill</span></td>
<td>54</td>
<td>Car Salesman</td>
</tr>
<tr id="name_3">
<td><a id="item_3" href="static\text_files\Rodrigo.txt">Rodrigo</a></td>
<td>7</td>
<td id="job_3" onclick="history_buff(this.id)">Merchant</td>
</tr>
</table>
</div>
<div class="block" id="two">
<h2>History</h2>
<ul id="user_history">
<li>Nothing</li>
<li>Something</li>
</ul>
</div>
你应该学习有关Javascript和jQuery的理解和基础教程。您应该轻松达到理想的结果。
答案 4 :(得分:1)
function history_buff(obj){
var elList = document.getElementById("user_history");
var element = document.getElementById(obj)
var text = element.innerText || element.textContent;
var user_item = element.innerHTML = text;
alert("Trying to add: " + user_item)
var li = document.createElement("li");
li.innerHTML = user_item;
elList.appendChild(li);
}
请注意您的代码:
str()不是js函数
li.innerHtml应该等于user_item而不是user_item.value - 这是未定义的。然后将li附加到ul列表