使用 JSON 数据更新 <li> 文本
Updating <li> text using JSON data
我尝试使用以下脚本使用 JSON 数据更新动态添加的 li 文本(html 代码),但更新方法不起作用,你能帮我检查一下吗?
City
<input type="text" id="cinput">
<br>
<input type="button" id="cadd" value="Add">
<input type="button" id="cup" value="Update">
<div class="clista">
<ul class="lista inset" id="citem">
<li data-val="Campinas">Campinas [T:00ºC H:00%]<a href="#" onclick="if(confirm('Remover?')){parentNode.parentNode.removeChild(parentNode)}"> <span style="float:right;"><b>[X]</b></span></a>
</li>
<li data-val="Sao Paulo">Sao Paulo [T:00ºC H:00%]<a href="#" onclick="if(confirm('Remover?')){parentNode.parentNode.removeChild(parentNode)}"> <span style="float:right;"><b>[X]</b></span></a>
</li>
</ul>
</div>
爪哇语
$("#cadd").on("click", function () {
var cinput = document.getElementById("cinput").value;
var msg = "'Remover?'";
$.getJSON("http://api.openweathermap.org/data/2.5/weather?q=" + cinput + "&units=metric", function (data) {
var cdados = ('T:' + data.main.temp + 'ºC H:' + data.main.humidity + '%');
$('#citem').append('<li data-val="' + cinput + '">' + cinput + " [" + cdados + ']<a href="#" onclick="if(confirm(' + msg + ')){parentNode.parentNode.removeChild(parentNode)}"> <span style="float:right;"><b>[X]</b></span></li>');
document.getElementById("cinput").value = "";
});
});
$("#cup").on("click", function () {
var cidade = '';
var oldText = '';
var novotxt = '';
var msg = "'Remover?'";
var Link = ('<a href="#" onclick="if(confirm(' + msg + ')){parentNode.parentNode.removeChild(parentNode)}"> <span style="float:right;"><b>[X]</b></span></a>');
$('.clista li').each(function () {
var $this = $(this);
cidade = $(this).data('val');
oldText = $(this).html();
$.getJSON("http://api.openweathermap.org/data/2.5/weather?q=" + cidade + "&units=metric", function (data) {
var cdados = ('T:' + data.main.temp + 'ºC H:' + data.main.humidity + '%');
novotxt = cidade + " [" + cdados + "] ";
alert(novotxt);
$this.html(function (index, html) {
return html.replace(oldText, novotxt + Link);
});
});
});
});
jsFiddle here: http://jsfiddle.net/fabiobraglin/rcheaowx/21/
您在这里遇到了一个异步问题。 您有$.each
,并且在其中设置oldText
并尝试在getJSON
的回调中使用它的值。 但是,整个 $.each
循环将在运行任何getJSON
回调之前运行,因此oldText
最终将设置为集合中所有回调的最后一个元素,因此它只对最终元素是正确的。
这里有两点需要注意:此回调的 html
参数:
$this.html(function (index, html) {
return html.replace(oldText, novotxt + Link);
});
应该在功能上等同于您尝试使用 oldText
的目的。 但是,在运行此回调之前,元素的内容也会被清除,并且从中返回的任何内容都将是元素的全部内容,因此无需尝试以这种方式替换oldText
。 只需返回您的新内容:
$this.html(function (index, html) {
return novotxt + Link;
});
如果您发现自己处于循环中的变量需要在回调中可用的情况,则可以创建闭包,如下所示:
$('.clista li').each(function () {
var $this = $(this);
cidade = $(this).data('val');
oldText = $(this).html();
(function getData(_oldText, _cidade) {
$.getJSON("http://api.openweathermap.org/data/2.5/weather?q=" + _cidade + "&units=metric", function(data) {
var cdados = ('T:' + data.main.temp + 'ºC H:' + data.main.humidity + '%');
novotxt = _cidade + " [" + cdados + "] ";
alert(novotxt);
$this.html(function(index, html) {
return html.replace(_oldText, novotxt + Link);
});
});
})(oldText, cidade);
});
相关文章:
- 更改li标记文本的Javascript
- 使用Jquery在li内部获取具有特定文本的锚点
- 获取带有 jQuery 中的文本值的 AN LI 的 ID
- 从 li 获取文本和 id 值
- 仅在具有相同类的一个 li 上预览文本
- 有角度的自动建议文本排版和html ul li下拉列表
- 使用纯JS点击即可从li元素中获取文本和id
- 通过从li中选择一个值来自动完成具有多个值的文本框
- 对于列表中包含带文本的跨度的每个li,请从该li中删除另一个跨度
- 获取选定的li文本和设置菜单'it’s text with it
- 使用JavaScript返回click-li项目的值,并用结果填充文本区域
- 将文本发送到数组中的特定li
- 如果所有LI的类名相同,如何获取当前LI文本
- 如何在不更改的情况下更改ul中的li文本'的其他属性
- 我如何获得单独的li文本而不是内部HTML
- 向后遍历有序列表,返回每个li文本
- CSSJS-默认情况下,长li文本展开(溢出应隐藏)
- 转换& lt; li>文本转换成可点击的链接
- 在离开列表样式时删除li文本
- webdriverio -如何获得一个LI文本到一个数组