如何使用jQuery删除变量中的选项标签?

时间:2012-08-02 09:45:59

标签: jquery variables jquery-selectors

删除DOM中的选项标签对我来说不是问题,但现在我必须在变量中删除选项Tag。这就是我所拥有的:

var txt = "<select name='example'><option value='1'>Test</option></select>";
$(txt).find("select option[value='" + $(this).attr("id") + "']").remove();

选择器似乎是正确的,我用text()调试它,它给了我正确的价值。但变量txt没有改变 - 我做错了什么?

6 个答案:

答案 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");