jquery 冒号转义 为啥双斜杠
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery 冒号转义 为啥双斜杠相关的知识,希望对你有一定的参考价值。
下面是jquery api中的代码片段:
html 代码:
<span id="foo:bar"></span>
<span id="foo[bar]"></span>
<span id="foo.bar"></span>
jQuery 代码:
#foo\\:bar
#foo\\[bar\\]
#foo\\.bar
jQuery 代码中转义 . [ ] : 都用了两个\\ 为什么需要两个\\ ?用一个\为什么不行?
如果用 #foo\\:bar 取到的应该是#foo\:bar啊? 希望高手能解答下
谢谢1楼的回答 但我还是不懂
为什么最终的目标是为了取到 ===> 反斜杠 点
而不是 取到 ===> 点
如果最终目标是为了取到 ===> 反斜杠 点
那么 反斜杠 点 -> 点这个过程是谁转换的?
jQuery的选择器需要对 : 进行转义, : 需要写成 \:
但是你可以看出 '#foo\:bar' 是一个字符串,那么这个字符串中的所有 \ 都应该被转义,所以 \: 就应该写成 \\:
代码经过javascript的解析器解析后少掉一个,被jquery的解析器解析后又少掉一个。追问
解析两次?javascript和jquery各解析一次? 那么顺序呢? 我之前一直以为解析一次 各式在什么时候解析的呢?
追答$() 这个是jquery的function,字符串常量是传递给这个function的。
字符串先被javascript解析,然后当成参数传递给 $() 这个jquery的function,jquery这个function内部再对这个字符串进行处理。
冒号,中括号,点这些符号如果在前面加上反斜杠就没有任何意义了,就变成纯字符串。
但反斜杠本身就是应该被跳出,所以要给自己再加一个反斜杠
来达到最终目的 ====> 反斜杠 点 参考技术B
\\\\:
: 需要转移 所以用 \\:
当上述写完后,\\ 需要再次转移。所以就要写成\\\\:
使用 jQuery $().find 解析带有命名空间的 XML
【中文标题】使用 jQuery $().find 解析带有命名空间的 XML【英文标题】:Parsing XML with namespaces using jQuery $().find 【发布时间】:2010-09-12 19:36:06 【问题描述】:我正在尝试获取 XML 文档元素的内容,但该元素的名称中有一个冒号。
此行适用于所有元素,但名称中带有冒号的元素除外:
$(this).find("geo:lat").text();
我认为冒号需要转义。我该如何解决这个问题?
【问题讨论】:
【参考方案1】:使用反斜杠,它本身应该被转义,这样 JavaScript 就不会吃掉它:
$(this).find("geo\\:lat").text();
【讨论】:
@Vaske,我在使用最新版本的 jQuery 之一的 Chrome 中看到了同样的事情。在冒号后使用节点名称的后半部分对我有用。使用.find("lat")
而不是.find("geo\\:lat")
,它对我有用。
@Mike 是的,这有帮助,但我遇到了命名空间问题,我返回的 XML 的一般问题是它包含 .find
就像 getElementsByTagName
在浏览器(尤其是 Chrome 和 Firefox)之间的行为不同。如果您对直接子代感兴趣,请使用.children
,它可以跨浏览器工作。更多信息:wiki.orbeon.com/forms/doc/contributor-guide/…
我在相关问题的答案中引用了@MikeGrace 的评论:***.com/a/30040350/775359【参考方案2】:
这不仅仅是一个普通的元素名称。这是一个限定名称,这意味着它是一个专门引用命名空间中元素类型的名称。元素类型名称为“lat”,命名空间前缀为“geo”。
目前,jQuery 不能很好地处理命名空间,详情请参阅bug 155。
现在,作为一种解决方法,您应该能够仅使用本地名称选择这些元素:
$(this).find("lat").text();
如果必须区分具有相同本地名称的元素类型,则可以使用filter()
:
var NS = "http://example.com/whatever-the-namespace-is-for-geo";
$(this).find("lat").filter(function() return this.namespaceURI == NS; ).text();
编辑:我的错误,我的印象是补丁已经登陆。使用 Adam 对选择器的建议,如果您也需要命名空间,请使用 filter()
:
var NS = "http://example.com/whatever-the-namespace-is-for-geo";
$(this).find("geo\\:lat").filter(function() return this.namespaceURI == NS; ).text();
【讨论】:
【参考方案3】:如果你有 chrome 或 webkit 的 jquery 选择器问题没有选择它尝试
$(this).find('[nodeName=geo:lat]').text();
这种方式适用于所有浏览器
【讨论】:
值得注意的是,从 jQuery 1.7 开始,一些用于查找命名空间元素的变通方法存在问题。有关更多信息,请参阅这些链接:bugs.jquery.com/ticket/10377steveworkman.com/html5-2/javascript/2011/… 绝对建议查看 ArnisAndy 在上面的评论中提供的第二个链接。它胜过所有其他解决方案。 steveworkman 的链接真的很有帮助。这适用于我的 Chrome 和 FF:$(xData.responseXML).find("z\\:row, row").each(function() // Do stuff );
以上是关于jquery 冒号转义 为啥双斜杠的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery $().find 解析带有命名空间的 XML
配置web.config以将具有特定模式的URL重定向/转发到另一种模式(使用冒号和双斜杠)