我的问题是:
我选择了一个有很多孩子的div,并且想知道如何不选择某个实际上是之前所选元素的子元素。
我已经尝试了<?php
if(isset($_REQUEST['upload']))
{
$dir_name=dirname(__FILE__)."/Uploaded/";
$path=$_FILES['upload']['tmp_name'] ;
$name=$_FILES['upload']['name'] ;
$size=$_FILES['upload']['size'] ;
$type=$_FILES['upload']['type'] ;
$error=$_FILES['upload']['error'] ;
move_uploaded_file($path,$dir_name.$name);
echo "off" ;
echo "error in uploading";
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input type="file" value="choose" name="upload" />
<input type="submit" value="update" name="submit" />
</form>
</body>
选择器和:not(selectedElement)
选择器或api(不知道你怎么称呼它......)。无论如何,我还发现有人问过一个没有帮助的类似问题,所以我想找出错误的唯一方法就是在这里询问你是否有任何方法(我知道stackoverflow不是那样工作但我认真地坐着有很多次,无法解决它):
HTML:
.not(selectedElement)
jQuery的:
<div class="tablee" style="cursor:/*pointer*/;">
<table>
<tbody>
<tr>
<td>
<a href="something.php">
<img src="1.jpg">
</a>
</td>
<td class="postcontent">
<p class="postusername">
<a class="poster" href="something.php">momo</a>
<br>
some other text
</p>
</td>
<td>
<imgsrc="1.jpg">
</td>
</tr>
</tbody>
</table>
</div>
因此,如果点击//non-dynamyic
$(".tablee").not($(this).find('a')).click(function() {
$(this).next().slideToggle();
});
而不是其中的链接(在tablee
元素内),则tablee
之后的下一个元素将切换。
答案 0 :(得分:4)
来自您的评论
我试图在点击tablee元素时切换下一个元素(tablee之后直接出现的元素),除非没有点击这些链接。
这是一种忽略锚点的方法,
$(".tablee").click(function(e) {
if(!$(e.target).is("a")){
$(this).next().slideToggle();
}
});
以上is("a")
会检查当前点击的目标。
为什么你的代码不起作用
$(".tablee").not($(this).find('a'))
在上面的选择器this
中指的是窗口对象而不是.tablee
元素。父not()
上的div
也会使用.tablee
类过滤元素,而不是div
上的子元素。
答案 1 :(得分:2)
首先,您的选择器未选择所有子项并将click事件附加到那时。该事件仅在实际选择器上,并且在事件传播到父级时单击子项。
您在.tablee
上有一个点击事件,您不希望在点击其中的任何a
时触发该事件。在这种情况下,a
上有一个单独的事件stopPropagation
: -
$(".tablee").click(function() {
$(this).next().slideToggle();
});
$(".tablee a").click(function(e) {
e.stopPropagation();
});
这将停止点击a
冒泡到.tablee
。
答案 2 :(得分:1)
我的建议是测试目标事件元素:
$('.tablee').on('click', function(e) {
if (e.target.tagName != 'A') {
e.preventDefault();
$(this).next().slideToggle();
}
});
答案 3 :(得分:1)
jQuery .not()会过滤一组结果,因此请将其放在要过滤的集合的右侧
看起来你正在考虑将jQuery的.not()选择为排除某个元素被添加到一组选定项目中的东西。
实际上,它是一个过滤器,用于删除已选择的元素。因此,首先选择超集,然后(在其右侧)放置一个不过滤掉不需要的元素。
一个简单的例子:
<ul class="wrapper">
<li class="one">select me</li>
<li class="two">don't select me</li>
<li class="three">select me</li>
</ul>
<script>
$(document).ready(function() {
$(".wrapper").find('li').not(".two").css("color","blue");
});
</script>
答案 4 :(得分:0)
根据我的理解,您只想选择那些不包含<a>
标签的孩子,对吗?
这会找到所有<a>
标签,但这不是你想要的。
$('td').find('a')
这会找到包含 <td>
标记的所有<a>
。
$('td').has('a')
所以,你只需要排除那些
$('table').not( $('td').has('a') ).click( function() {
$(this).next().slideToggle();
});
不确定这是否是您正在寻找的精确元素,但这是如何查找包含某些其他元素的元素。在CSS中,它的
td:has(>a)
但遗憾的是,到目前为止还没有浏览器支持。