Javascript Jquery replaceWith删除内容

Javascript Jquery replaceWith删除内容,javascript,jquery,html,css,Javascript,Jquery,Html,Css,在手机和平板电脑上,我需要用select/option标签替换content 我不确定这为什么不起作用,因为选项会删除其中的内容 你知道如何让这个选择选项标记环绕我的跨度吗 var$window=$(window); var windowsize=$window.width(); 函数wrapContent(){ 如果(窗口大小span')。每个(函数(){ $(this).replace为(“”+$(this).text()+“”); }); $('.pick country>option'

在手机和平板电脑上,我需要用
select/option
标签替换
content

我不确定这为什么不起作用,因为选项会删除其中的内容

你知道如何让这个选择选项标记环绕我的跨度吗

var$window=$(window);
var windowsize=$window.width();
函数wrapContent(){
如果(窗口大小<800){
$('.pick country>span')。每个(函数(){
$(此)。替换为(“”);
});
$('.pick country>option').wrapAll('');
}
}
wrapContent();
$(窗口)。调整大小(wrapContent)

选择一个国家
伦敦
开普敦
北京
东京
香港
吉隆坡
新加坡
孟买
上海
悉尼
圣彼得堡
圣保罗
旧金山
达拉斯
纽约
迪拜
来自:

.replaceWith()方法通过一次调用从DOM中删除内容并在其位置插入新内容

因此,您必须在“替换”的每个交互中手动添加内容:

var$window=$(window);
var windowsize=$window.width();
函数wrapContent(){
如果(窗口大小<800){
$('.pick country>span')。每个(函数(){
$(this.replacetwith(“”+$(this.html()+“”);
});
$('.pick country>option').wrapAll('');
}
}
wrapContent();
$(窗口)。调整大小(wrapContent)

选择一个国家
伦敦
开普敦
北京
东京
香港
吉隆坡
新加坡
孟买
上海
悉尼
圣彼得堡
圣保罗
旧金山
达拉斯
纽约
迪拜

替换为替换整个内容,而不是标记

你可以做:

$('.pick-country > span').each(function () {
    $(this).html("<option>" + $(this).html() + "</option");
});
$('.pick country>span')。每个(函数(){

$(this.html(“+$(this.html()+”尝试以下方法:

$('body').append('<select></select>');

$('.pick-country > span').each(function (elem) {
    $('select').append('<option>' + $(elem).text() + '</option>');
});
    $('.pick-country > span').replaceWith(function () {
        return $('<option/>').text($(this).text()).attr({'value': this.id, 'id': this.id});;
    });
$('body')。追加(“”);
$('.pick country>span')。每个(函数(elem){
$('select').append('+$(elem.text()+'');
});

您正在用一个空白选项替换它们

您可以执行以下操作:

$(this).replaceWith('<option id="' + $(this).attr('id') + '">' + $(this).text() +'</option>');
$(this.replacetwith(“”+$(this.text()+“”);
var$window=$(window);
var windowsize=$window.width();
函数wrapContent(){
如果(窗口大小<800){
$('.pick country>span')。每个(函数(){
$(this).replace为(“”+$(this).text()+“”);
});
$('.pick country>option').wrapAll('');
}
}
wrapContent();
$(窗口)。调整大小(wrapContent);

选择一个国家
伦敦
开普敦
北京
东京
香港
吉隆坡
新加坡
孟买
上海
悉尼
圣彼得堡
圣保罗
旧金山
达拉斯
纽约
迪拜

您没有保留原始跨度的文本或其ID值。只需使用
text()
attr()
将它们添加到附加元素中即可:

jsiddle:

替换此行:

$(this).replaceWith('<option></option>');
$(this).替换为(“”);
为此:

$(this).replaceWith('<option>'+$(this).html()+'</option>');
$(this.replacetwith(“”+$(this.html()+“”);
编辑(带ID的选项):

$(this.replacetwith(“”+$(this.html()+“”);

正如您所知,在
标记中不能有
标记。它的语义不正确,浏览器无法正确呈现它。@Joshuawitley-在包装
$(this)之前,他正在替换
选项的
span
标记。替换为('+$(this.html()+);
是,或$(this)。替换为($(“”).text($(this).text());但是您应该将
id
设置为选项的
value=“”
propertyvalue“”,但是我的id有一个滚动到内容的调用。因此我需要保留id,这不会保留id。好吧,他可以将任何他想要的东西与此连接起来,比如:$(this)。替换为('+$(this).html()+)“”);但我认为您的解决方案更优雅。建议您完成您的答案。:)这不会创建
id
属性(也是必需的-请参阅注释)。这是我给他的一个开始,现在他只需使用$(elem)来获取属性。。。
$(this).replaceWith('<option>'+$(this).html()+'</option>');
 $(this).replaceWith('<option id='+$(this).attr("id")+'>'+$(this).html()+'</option>');