使用Google闭包编译器处理jQuery parseHTML()和html(),,,
Dealing with jQuery parseHTML() and html() when using Google closure compiler,,,
我有一组简单的语句,它们实际上可以工作(我已经运行了代码,它做了我期望的事情),如下所示:
result_xml = result.jqxhr.responseXML;
a = jQuery("data[name='calendar']", result_xml).text();
new_calendar = jQuery.parseHTML(a);
jQuery("div.calendar").html(jQuery("div.calendar table.calendar-table", new_calendar));
result
来自AJAX回复,您应该识别jqxhr
字段。
我希望a
是一个字符串,因为我用text()
得到了一个数据块。数据是我保存在XML文档中的HTML字符串。所以我可以这样说:
a = /** @type {string} */ jQuery("data[name='calendar']", result_xml).text();
现在,我将该字符串转换为HTMLDOM,认为它将是一个元素:
new_calendar = /** @type {Element} */ jQuery.parseHTML(a);
这就是我得到这个奇怪错误的地方:
警告-强制转换无效-必须是子类型或超类型
from:(数组。<(元素|null)>|null)
到:(元素|null)
那么parseHTML()
会返回一个元素数组(或null)吗?
然后我试图在html()
函数中使用parseHTML()
的输出,在那里,我也很难理解发生了什么
警告-无效的强制转换-必须是子类型或超类型已找到:(数组。<(元素|null)>|null)
必需:(Document|Element|Object.|jQuery|null|undefined)
坦率地说,我不明白为什么谷歌编译器会让一个函数的输出不能成为另一个的输入,即使它在现实世界中运行得很好。
Element
的数组会被认为是Document
吗?
最后(是的!所有这3行JavaScript!)我得到了另一个关于html()
函数输入的错误:
警告-jQuery.prototype.html的实际参数1与形式参数不匹配已找到:jQuery
必需:(函数(数字,字符串):|字符串|未定义)
jQuery("div.calendar").html(jQuery("div.calendartable.calendar table",new_calendar));
在这里,它也适用于现实世界。。。jQuery对象会自动转换为字符串,然后重新转换为一组要添加到我的日历中的标记吗?
闭包编译器的所有这些限制是否都是正常的?
根据Chad的回答,我用这种方式更改了代码:
result_xml = result.jqxhr.responseXML;
a = /** @type {string} */ (jQuery("data[name='calendar']", result_xml).text());
new_calendar = jQuery.parseHTML(a);
jQuery("div.calendar").empty().append(jQuery("div.calendar table.calendar-table", new_calendar[0]));
- 我将
text()
输出强制转换为闭包中的字符串 - 我使用
new_calendar
的元素0而不是直接使用new_calendar
- 我用
empty().append()
更改了html()
,因为append()
函数接受jQuery
对象作为输入
这让闭包编译器很高兴。
是当然,这是预期的行为。在JavaScript中有很多"有效"的东西。闭包编译器试图在被要求时强制执行良好的行为。
至于jQuery-这些是发布的jQuery API的常规限制。使用jQuery,代码通常支持未记录的行为(如您所列出的)。然而,jQuery团队可以随时自由更改未记录的行为。
Closure-compiler警告您,如果您与API规范中列出的内容不匹配(该定义由社区维护,因此并非总是100%正确)。
以下是相关规范:
- jQuery().html(string)-要设置为每个匹配元素内容的html字符串
- jQuery.parseHTML('string')-返回:数组
我使用DOM API而不是jQuery。数据中有一个完整的HTML文本。
// create DOM parser object
var dom_parser = new DOMParser();
// parse HTML into DOM document object
var doc = dom_parser.parseFromString(data , "text/html");
// doc.body.innerHTML = body part in text, not object
// <body> tag is stripped.
// append the body part into div with the id "contentsarea".
$("#contentsarea").empty().append(doc.body.innerHTML);
- 可以't让我的if语句处理js中的html表单输入
- 如何设置html元素填充的动画
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何编写HTML输入的JS内联
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量
- 如何使Javascript动态html表及其上的事件
- 在chrome.tabs.onCreated之后加载HTML页面
- 如何在vs2002中调试html页面
- 如何使用javascript或html下载PDF格式的填写表单
- 视频HTML没有'无法在Internet Explorer 11上工作
- HTML表单提交时未执行外部函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 使用angular重定向到html页面
- 分析高度属性时出现意外值{{specs.height}}.index.html
- 在html Select中添加搜索
- 多级HTML表单
- 使用Google闭包编译器处理jQuery parseHTML()和html(),,,