помогите разобраться с функцией split() в jQuery

117
01 июня 2019, 19:10

выдает typeError: undefined is not an object (evaluating 'values.split')

но если вместо

    function transform(el, prop, values) {
  var propFull = getFullName(prop) || prop;
  $(el).css(propFull, values)
}

написать:

function transform(el, prop, values) {
  $(el).css(prop, values)
}

полностью игнорируя словарь сокращений, который мне очень необходим, то все работает ок.

но я хочу чтобы работало и так, и так. т.е можно было писать значения через запятую, как: border=2px,solid,black и чтоб при этом словарь сокращений тоже работал, как: w=200px h=50px

полный пример игнорируя словарь:

var slovar = { 
  //width and height 
  'w': 'width', 
  'h': 'height' 
} 
 
function getFullName(shortName) { 
  return slovar[shortName]; 
} 
 
function getProp(classStr) { 
  return classStr.split('=')[0] 
} 
 
function getValues(classStr) { 
  var values = classStr.split('=')[1] 
  return values.split(',').join(' ') 
} 
 
function transform(el, prop, values) { 
  var propFull = getFullName(prop) || prop; 
  $(el).css(propFull, values) 
} 
 
 
 
var elements = $('div, p, span, img, li, ul, a, h1, h2, h3, h4, h5, h6') 
elements.each(function(i, el) { 
  var classList = $(el).attr('class') 
  if (!classList) return 
  var classProps = classList.split(' ') 
  $(classProps).each(function(i, str) { 
    var prop = getProp(str) 
    var values = getValues(str) 
    transform(el, prop, values) 
  }) 
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<div class='border=2px,solid,black'>hello world</div>

и еще... как мне задать все существующие элементы в переменной elements? не писать же все по одному как в примере.?

Answer 1

var slovar = { 
  //width and height 
  'w': 'width', 
  'h': 'height' 
} 
 
function getFullName(shortName) { 
  return slovar[shortName]; 
} 
 
function getProp(classStr) { 
  return classStr.split('=')[0]; 
} 
 
function getValues(classStr) { 
  return classStr.split('=')[1]; 
} 
 
function transform(el, prop, values) { 
  var newProp = getFullName(prop) || prop; 
  $(el).css(newProp, values); 
} 
 
var elements = $('div, p, span, img, li, ul, a, h1, h2, h3, h4, h5, h6') 
elements.each(function(i, el) { 
  var classList = $(el).attr('class'); 
  if (!classList) return; 
  var classProps = classList.split(';'); 
  $(classProps).each(function(i, str) { 
    var prop = getProp(str); 
    var values = getValues(str); 
    transform(el, prop, values); 
  }); 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
<div class='border=2px solid black;w=200px;h=100px'>hello world</div>

READ ALSO
Обработка событий. Связать radiobutton с button

Обработка событий. Связать radiobutton с button

У меня есть форма в ней в зависимости от выбора радио кнопки вычисляется площадьКак связать радиокнопку с кнопкой? jsfiddle

149
setBounds проблема со скрытым блоком

setBounds проблема со скрытым блоком

В общем, суть проблемы в том, что карта инициализируется, потом в какой-то момент N вызывается setBoundsВидимо, из-за того, что блок в котором находится...

132
Поле для ввода даты, как изменить значение по умолчанию на текст?

Поле для ввода даты, как изменить значение по умолчанию на текст?

Как изменить значение по умолчанию на текст ? например, в инпуте по умолчанию написано ддмм

128
Ошибка в mysql | |Mysqldump

Ошибка в mysql | |Mysqldump

разбираюсь в книге Робин Никсон сооздаем динамимечские веб сайтызастраял на mysqldump

126