我有一个div id="ftbutton_1357567084/Team:8/User:10/Image:195"
后面的id我希望在调用ajax后替换它的html。
当我尝试使用jQuery执行此操作时,例如跟随它不起作用
jQuery("#"+id).html(SOME HTML HERE);
以下代码的作用
document.getElementById(id).innerHTML = SOME HTML HERE;
我知道ID不应包含一些特殊字符
ID attributes should be = after an initial letter (a-z or A-Z), may also use
periods and colons, in addition to letters, numbers, hyphens, and underscores.
参考How do I select an element by an ID that has characters used in CSS notation?
但由于某种原因,我不能改变每个元素的id,因为它被认为是网站。
我也试过以下但是没有用
function jq( myid ) {
return "#" + myid.replace( /(:|\.)/g, "\\$1" );
}
jQuery(jq("#"+id)).html(SOME HTML HERE);
我只是想知道是否是这种情况,我是否需要使用document.getElementById(""+id)
代替jQuery("#"+id)
?
或者换句话说
document.getElementById(""+id)
比jQuery("#"+id)
更可靠吗?
答案 0 :(得分:7)
这样做:
$('[id="ftbutton_1357567084/Team:8/User:10/Image:195"]');
这实际上是一个有趣的问题。很可能jQuery认为:
正在启动一个过滤器,比如$('div:visible')
并且没有意识到它是一个完整的ID。
答案 1 :(得分:2)
/
is a meta character, you have to escape it as well:
要使用任何元字符(例如
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
)作为名称的文字部分,必须使用两个反斜杠进行转义:\\
。
所以这应该可以正常工作:
function escape_selector( selector ) {
return selector.replace( /([!"#$%&'()*+,./:;<=>?@\[\\\]^`{|}~])/g, "\\$1" );
}
(作为roasted mentioned in his comment,您还需要删除'#' +
,否则将其添加到选择器两次。
答案 2 :(得分:2)
问题是您要添加#
两次。一旦进入该功能,一次进入实际的jQuery
通话。应该是这样的:
function jq( myid ) {
return "#" + myid.replace( /(:|\.|\/)/g, "\\$1" ); //note that added `/`
}
jQuery(jq(id)).html(SOME HTML HERE); //don't add # again!
稍微不相关的提示:始终记得您可以使用实际的DOM对象启动jQuery实例:
jQuery(document.getElementById(someId)); //this will work
答案 3 :(得分:0)
最简单的答案似乎是:
function jq( myid ) {
return $(document.getElementById(myid));
}
jq(myid).html(...);
答案 4 :(得分:-4)
正确的功能是:
function jq( myid ) {
return *$("#" + myid)*.replace( /(:|\.)/g, "\\$1" );
}
jQuery(jq("#"+id)).html(SOME HTML HERE);