删除DOM中的选项标签对我来说不是问题,但现在我必须在变量中删除选项Tag。这就是我所拥有的:
var txt = "<select name='example'><option value='1'>Test</option></select>";
$(txt).find("select option[value='" + $(this).attr("id") + "']").remove();
选择器似乎是正确的,我用text()调试它,它给了我正确的价值。但变量txt没有改变 - 我做错了什么?
答案 0 :(得分:2)
您不应在选择器中使用select
。并且您必须首先使用$()
使其成为jQuery对象。之后你可以操纵它。
var txt = "<select name='example'><option value='1'>Test</option></select>",
$txt = $(txt);
$txt.find("option[value='" + $(this).attr("id") + "']").remove();
答案 1 :(得分:1)
如果你期望txt
的值改变它不会--jQuery不会改变它(它不能;它是通过值传递,而不是引用),它只会伪造一个伪来自它的DOM并删除选项。但是,没有任何永久性的事情发生。
如果要检索受影响的结果,则需要将整个内容放在容器中并回读其HTML:
var txt = "<p>this is a HTML <span>string</span></p>";
txt = $('<div />').append(txt).find('span').remove().end().html();
txt
现已移除span
。
答案 2 :(得分:1)
创建一个jQuery选择器,以保存自己不得不再次将其重新组合成一个。
在您的查找中,当您在选择中执行select
时,您也无需再次指定.find()
。
为简单起见,我在删除之前将.find()
的结果缓存到另一个选择器变量中。
以下工作正常。好吧,如果我使用1
代替$(this).attr("id")
,它可以正常工作,因为我不知道你在$(this)
中引用了什么。
var $txt = $("<select name='example'><option value='1'>Test</option></select>");
//var $option = $txt.find("option[value='" + $(this).attr("id") + "']");
var $option = $txt.find("option[value='" + 1 + "']"); // selects option with value of 1
$option.remove(); // Removes option
工作DEMO
答案 3 :(得分:0)
没有,txt
仍然只是String
。我想你想要一个变量中的DOM片段,这就是:
var txt = "<select name='example'><option value='1'>Test</option></select>";
var $domSnippet=$(txt);
domSnippet.find("select option[value='" + $(this).attr("id") + "']").remove();
答案 4 :(得分:0)
您将从包含一些HTML的字符串开始,存储在txt
变量中。当您调用$(txt)
时,您正在创建一个jQuery对象,其中包含该HTML字符串中定义的元素,这些元素与您的txt
变量完全分开。然后,您可以操纵(在这种情况下尝试删除)元素,但由于它与txt
完全分开,因此更改不会反映在其中。
如果您想将txt
的值更改为其他内容,则需要将该值重新分配给它,可能就是这样(您提到调用.text()
给了您什么期待/希望看到):
txt = $(txt).find("select option[value='" + $(this).attr("id") + "']").remove().text();
答案 5 :(得分:0)
remove()方法删除元素 - 因此它们必须在DOM中,因为txt是一个未在DOM中表示的变量,该值只是一个字符串。你应该使用像replace()这样的东西。
var txt = "<select name='example'><option value='1'>Test</option></select>";
txt=txt.replace("<select name='example'><option value='1'>Test</option></select>","replacedText");