2015-04-24 2 views
1

С jQuery: Как предотвратить детей (<span>) от наследования атрибутов родителей (<p>)? Я работаю над этим и исследую это в течение 2+ часов; ничего не сработало.jQuery: Предотвратить наследование дочерних элементов родительским атрибутом?

Проблема раздела:

$("p").not("span").css("cursor", "pointer");

<p>...<span>...</span></p>

Полный код:

<script src="https://code.jquery.com/jquery-1.10.2.js"></script> 
<style>body {font-family:Arial,san-serif;font-size:25pt;}</style> 
<body> 
<p>Always shown | <span>Show/Hide</span></p> 
<p>Always shown | <span>Show/Hide</span></p> 
</body> 

<script> 
//Change pointer to a hand: 
$("p").not("span").css("cursor", "pointer"); 
//Show & Hide by clicking on "Always shown": 
function handler(event) { 
    var target = $(event.target); 
    if (target.is("p")) { 
    target.children().toggle(); 
    } 
} 
$("body").click(handler).find("span").hide(); 
</script> 
+0

вы можете привести пример о том, как вы хотите работать? – renakre

+0

это чистая проблема с CSS ... лучшее решение - это переопределение того, что вы не хотите, чтобы ребенок наследовал – maioman

ответ

2

Почему бы вам не использовать CSS?

p{ cursor: pointer; } 
p span{ cursor: default; } 
+0

, если span - это p детей, правильный sintax - это p> span – MTS

+2

@MTS Ваш селектор будет нацелен только на прямые дочерние элементы который хорош, но также не требуется или лучше в этом случае - p span - совершенно правильный способ нацелиться на этот диапазон. – wunth

+0

Дети не вложены, являются прямыми. – MTS

2

Выражение $("p").not("span") буквально означает "выберите p элементы, которые не spans". Очевидно, что это всегда так.

Вы хотите проверить, если p не содержит span детей:

$("p:not(:has(span))").css("cursor", "pointer"); 

Однако для решения этой задачи, вы должны, вероятно, пойти с решением CSS, а затем JavaScript.

1

Вы можете попробовать это: fiddle

p:hover { 
    cursor: pointer; 
} 
span:hover { 
    cursor: default; 
} 
1

Вы можете сделать этот подход также, если вы хотите сделать на Jquery:

$("p").css("cursor", "pointer"); 
$("p span").css("cursor", "default"); 
Смежные вопросы