如何使用jQuery UI创建一个可拖动的元素,而不是它的子元素?
例如,我想要这样:
Text that can be selected
您可以使用cancel
选项,该选项接受不应允许拖动的可拖动对象的子元素的选择器:
$('.draggable').draggable({cancel : 'p'});
JS小提琴演示 。
除了p之外,还可以有其他元素作为子元素。 在这种情况下,您必须使用空间选择器:
$(".draggable").draggable({cancel: ".draggable *"});
工作示例位于JSFIDDLE 。
它使用空间选择器,它选择元素的所有子元素,无论它们是子元素还是大元素元素。 w3schools的空间选择器示例。
这样做的缺点是所有文本节点都必须包含在标签内,例如。 span,div,p。 如果它们不在标记内,则*选择器无法匹配它们。 要保持纯文本节点可选,您必须使用更复杂的代码,因为CSS和jQuery不包含纯文本节点的选择器。 你可以,例如。 使用您自己的标记来包装文本节点。 自定义节点的原因是它降低了这个自定义元素被意外设置的可能性(比如使用span等),在这种情况下我们将它命名为’custom’:
$(".draggable").draggable({cancel:'.draggable *'}) .contents().filter(function() {return this.nodeType == Node.TEXT_NODE;}) .wrap(' ');
以上是JSFIDDLE 。 现在也可以选择纯文本节点。 如果您将更多文本节点动态添加到可拖动元素中,则情况会发生变化。 然后你必须再次包装它们。
您可以覆盖start
函数作为初始化选项的一部分。 在这里回归假将过早地突破它。 要访问单击时创建的鼠标事件,可以访问jQuery事件上的originalEvent
属性。
$(".draggable").draggable({ start: function(event, ui) { return event.originalEvent.target === this; } });
这允许只有父项可拖动。 您可以将其替换为您想要成为唯一可拖动项目的任何元素,只需确保它是比较的dom节点。
Plunkr的例子
- JQuery:.val()不适用于textarea
- JavaScript的补充属性/设置:window.print()默认情况下启用Backgrounds
- 如何在Jquery中完成for循环后触发回调函数?
- jquery自动填充自动填充字段,带有第一个值和高亮度添加部分
- ‘show’事件不会在IE9中使用Rails中的Twitter Bootstrap Modal触发
- 如何在javascript中选择包含特定字符串的所有id标签?
- PhoneGap Build:SocialSharing插件未加载
- 通过jQuery在一个Ajax调用中使用其他字符串发送ArrayBuffer
- 如何在mouseover和超链接上的leaflet.js中显示突出显示的轮廓?