Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery正在删除它不应该删除的标记_Javascript_Jquery_Dom - Fatal编程技术网

Javascript jQuery正在删除它不应该删除的标记

Javascript jQuery正在删除它不应该删除的标记,javascript,jquery,dom,Javascript,Jquery,Dom,我有许多基于各种用户输入生成的动态元素。我试图删除某些不适用于每个select的,但jQuery似乎删除了更多的,然后应该根据我的代码删除。一个完整的用例将很难复制,所以我将发布我所看到的,希望这将足够好,以解决这个问题 为了向自己证明我没有发疯,我决定添加一个类,而不是删除循环中的类。以下是我使用的: $('.my-select').each(function(sourceIdx,sourceEl){ var id = $(sourceEl).attr('id'); var s = $('

我有许多基于各种用户输入生成的动态元素。我试图删除某些不适用于每个select的,但jQuery似乎删除了更多的,然后应该根据我的代码删除。一个完整的用例将很难复制,所以我将发布我所看到的,希望这将足够好,以解决这个问题

为了向自己证明我没有发疯,我决定添加一个类,而不是删除循环中的类。以下是我使用的:

$('.my-select').each(function(sourceIdx,sourceEl){
 var id = $(sourceEl).attr('id');
 var s = $('#'+id).parents('table').find('.some-input').val();
 $(sourceEl).find('option[value="'+s+'"]').addClass('option-remove');
});
以下是生成的源代码:

<select class="my-select" id="1295453461993">
 <option title="1" value="1">1</option>
 <option title="2" value="2" class="option-remove">2</option>
 <option title="3" value="3">3</option>
</select> 

<select class="my-select" id="1295453475890">
 <option title="1" value="1">1</option>
 <option title="2" value="2">2</option>
 <option title="3" value="3" class="option-remove">3</option>
</select>
我明白了:

<select class="my-select" id="1295454051124">
 <option title="1" value="1">1</option>
</select>

<select class="my-select" id="1295454058398">
 <option title="1" value="1">1</option>
 <option title="2" value="2">2</option>
</select>
这让我说:等等,什么?!。当jQuery删除第二个select中的值时,它似乎会从第一个select中删除相同的值=3。不酷

那么我在这里做错了什么


我在FireFox 3.5中测试,在IE和jQuery 1.4.4中测试的结果相同。

虽然我不知道你的问题的解决方案,但我可能会有帮助。也许这会让你的生活更轻松->


我用过它,效果很好。而且它不是一个很大的插件,所以没有很大的开销。

一个精简的、非动态的测试用例可以很好地工作:

<!doctype html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
</head>

<body>

<form>
<select class="my-select" id="1295453461993">
  <option title="1" value="1">1</option>
  <option title="2" value="2" class="option-remove">2</option>
  <option title="3" value="3">3</option>
</select> 

<select class="my-select" id="1295453475890">
  <option title="1" value="1">1</option>
  <option title="2" value="2">2</option>
  <option title="3" value="3" class="option-remove">3</option>
</select>
</form>

<script>
  $('.option-remove').remove();
</script>

</body>
</html>
一定还有别的事情发生

$sourceEl.find'option[value='+s+']'。addClass'option-remove'

只是好奇,如果你用这个来代替呢

$('#' + id).find('option ... 
i、 e.通过id,而不是通过传递到函数中的元素

i、 e.一个大选择器,而不是“查找”


第二个select是通过复制html动态创建的


复制时是否给它一个唯一的ID?

我无法复制此文件,请参见。您将$'.option删除'.remove'放在了什么位置?我不明白$sourceEl.find'option[value='+s+']'可以同时应用于value=2和value=3.Yeah我也不能..你能发布完整的HTML吗..第二个选择是通过复制更大代码块的HTML并将其附加到外部容器来动态创建的。我想知道这是否是让jQuery感到困惑的原因?那么您应该显示该副本的结果,因为错误不在发布的标记中。这是副本的结果…我同意。我是在jsfiddle上创建的,它在Chrome中运行良好&FF没有尝试IE。第二个选择是通过复制更大代码块的html并将其附加到外部容器来动态创建的。我想知道这是不是让jQuery感到困惑的原因?我明白了。我在这个块之前修改了这个值,我犯了一个愚蠢的错误。标记为“正确”答案是因为你把它钉住了-“发生了其他事情”。。。感谢您的理智检查。请重新阅读最初的帖子,并意识到问题不在于类的分配,也就是说,您的目标正在按预期工作。能否将select的ID传递到此处的函数?>>$。选项删除“.”删除;类似于$+id+'>.option remove'.remove?也只是好奇-你有没有尝试过除“移除”以外的其他方法。。。例如,尝试。隐藏,或脚本到控制台的东西的名称。。。我总是尝试通过使用另一种方法来排除jquery方法(如remove)的故障,只是为了确保我的脚本通常以正确的元素为目标,并绕过任何特定于方法的内容。否则,我不知道,伙计,这是一个奇怪的。
$('#' + id).find('option ... 
$('#' + id + '> option[value="'+s+'"}')