Метод на основе XHR.
function dataURLtoBlob( dataUrl, callback )
{
var req = new XMLHttpRequest;
req.open( 'GET', dataUrl );
req.responseType = 'arraybuffer'; // Can't use blob directly because of https://crbug.com/412752
req.onload = function fileLoaded(e)
{
// If you require the blob to have correct mime type
var mime = this.getResponseHeader('content-type');
callback( new Blob([this.response], {type:mime}) );
};
req.send();
}
dataURLtoBlob( 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==', function( blob )
{
console.log( blob );
});
Вы должны использовать *
вместо ^
. Согласно MDN
blockquote>
[attr^=value]
Представляет элементы с именем атрибута attr, значению которого предшествует (предшествует) значение
[attr*=value]
Представляет элементы с именем атрибута attr , значение которого содержит хотя бы одно вхождение значения в строке
[111 ]$('.box2').addClass(function() { return 'list_' + $('.box1 li').length; });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <ul class="box1"> <li>a</li> <li>b</li> <li>c</li> </ul> <div class="box2">text</div>
^=
выбирает элемент с атрибутом class
, который начинается с следующей строки. Вы можете использовать селектор *=
для выбора класса , который содержит :
$('.box2').addClass(function() {
return 'list_' + $('.box1 li').length;
});
div[class*="list_"] {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box2">text</div>
Но я бы никогда не полагался на такую конструкцию - вместо этого использовал бы новый класс (скажем, list
, основанный на вашей бизнес-логике), а затем вы можете использовать [ 1110] вместо специфичность (обратите внимание, что после точки нет пробела):
$('.box2').addClass(function() {
// your business logic determining which class to add
return 'list';
});
.box2.list {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box2">text</div>
Попробуйте *=
. Который ищет совпадение в любом месте значения атрибута класса.
Ваш текущий селектор, ^=
, пытается найти соответствие в начале значения атрибута класса.
См .: Селекторы атрибутов - MDN
$('.box2').addClass(function() {
return 'list_' + $('.box1 li').length;
});
div[class*="list_"] {
color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="box1">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<div class="box2">text</div>
Вы также можете добавить атрибут data-
вместо класса. Нечто подобное data-list-count
. Тогда ваш селектор будет [data-list-count]
.