2016-08-12 42 views
2
之前

這是我的場景,創建divCSS並在右上方添加了0​​,之前添加了pseudo-class。如何在javascript的幫助下點擊X來關閉此div?如何在css選擇器上應用jQuery:在

Image

CSS

.validation-summary-errors{ 
    position: absolute; 
    width: 260px; 
    padding: 20px; 
    box-sizing: border-box; 
    top: 50%; 
    left: 50%; 
    background-color: #fff; 
    text-align: center; 
    font-size: 14px; 
    -webkit-transform: translate(-50%, -50%); 
    transform: translate(-50%, -50%); 
    border-radius: 4px; 
    border: #000 solid 1px; 
    box-shadow: #232323 1px 1px 6px; 
} 

.validation-summary-errors:before { 
    display: block; 
    content: "X"; 
    position: absolute; 
    right: -15px; 
    top: -15px; 
    background-color: rgba(0, 0, 0, 0.85); 
    padding: 5px; 
    border-radius: 50%; 
    font-size: 16px; 
    color: #fff; 
    width: 29px; 
    box-sizing: border-box; 
} 

HTML視圖(編輯)

<div class="message-error"> 

          @validationSummary 

        </div> 
+4

僞類不是DOM的一部分,所以你不能添加事件偵聽器。 –

+2

':之前'是一個僞元素,不能在DOM中訪問! – Pugazh

+0

@AlexChar您可以建議的任何其他解決方案 – Mangrio

回答

5

:before是一個僞元素,無法在DOM中訪問。取而代之的是spandiv這些風格,並使用它的click事件。

注:只要確保你定義的CSS的span.close :-)

解決方案1:如果您可以編輯HTML。

$(function() { 
 
    $('.close').click(function() { 
 
    $(this).parent().hide(); 
 
    }); 
 
});
.validation-summary-errors { 
 
    position: absolute; 
 
    width: 260px; 
 
    padding: 20px; 
 
    box-sizing: border-box; 
 
    top: 50%; 
 
    left: 50%; 
 
    background-color: #fff; 
 
    text-align: center; 
 
    font-size: 14px; 
 
    -webkit-transform: translate(-50%, -50%); 
 
    transform: translate(-50%, -50%); 
 
    border-radius: 4px; 
 
    border: #000 solid 1px; 
 
    box-shadow: #232323 1px 1px 6px; 
 
} 
 
span.close { 
 
    cursor: pointer; 
 
    display: block; 
 
    content: "X"; 
 
    position: absolute; 
 
    right: -15px; 
 
    top: -15px; 
 
    background-color: rgba(0, 0, 0, 0.85); 
 
    padding: 5px; 
 
    border-radius: 50%; 
 
    font-size: 16px; 
 
    color: #fff; 
 
    width: 29px; 
 
    box-sizing: border-box; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="validation-summary-errors"> 
 
    This specified email already exists 
 
    <span class="close">X</span> 
 
</div>

解決方案2:如果HTML被動態創建的。

$(function() { 
 
    $('.validation-summary-errors').append('<span class="close">X</span>'); 
 

 
    $('.validation-summary-errors').on('click', 'span.close', function() { 
 
    $(this).parent().hide(); 
 
    }); 
 
});
.validation-summary-errors { 
 
    position: absolute; 
 
    width: 260px; 
 
    padding: 20px; 
 
    box-sizing: border-box; 
 
    top: 50%; 
 
    left: 50%; 
 
    background-color: #fff; 
 
    text-align: center; 
 
    font-size: 14px; 
 
    -webkit-transform: translate(-50%, -50%); 
 
    transform: translate(-50%, -50%); 
 
    border-radius: 4px; 
 
    border: #000 solid 1px; 
 
    box-shadow: #232323 1px 1px 6px; 
 
} 
 
span { 
 
    cursor: pointer; 
 
    display: block; 
 
    content: "X"; 
 
    position: absolute; 
 
    right: -15px; 
 
    top: -15px; 
 
    background-color: rgba(0, 0, 0, 0.85); 
 
    padding: 5px; 
 
    border-radius: 50%; 
 
    font-size: 16px; 
 
    color: #fff; 
 
    width: 29px; 
 
    box-sizing: border-box; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="validation-summary-errors"> 
 
    This specified email already exists 
 
</div>

+0

一個工作示例是其他評論/答案中缺少的。 +1 –

+0

我的div'validation-summary-errors'正在動態創建,如何插入'span' – Mangrio

+0

@QadeerMangrio:檢查更新後的答案! – Pugazh

1

僞元素不在DOM。你可以閱讀它感謝getComputedStyle方法,但不能操縱它。

取而代之的是,創建一個絕對定位的div,其中包含與之前鏈接的X OR。將您的監聽器設置爲該div。

3

您可以使用CSS pointer-events屬性忽略父點擊,而不是僞元素。這樣,您可以在父級上擁有一個只由僞元素觸發的點擊偵聽器。

這將是一個問題,如果您需要允許父指針事件的其他原因當然是一個問題。

fiddle

+0

好想法!+1 – Pugazh

+0

雅可能夠好,缺點是你不能再綁定任何鼠標事件到這個元素,順便說一句可能會帶來一些其他問題,因爲例如點擊會通過它。所以用戶可以點擊他沒有看到/期望的東西。但是對於這個問題,捕獲鼠標事件的容器中的wrapper元素可以修復它,仍然猜測。 –